几个常用的数据排重方法

排重(Unique),是一种剔除数据中重复项的操作。

总结一些比较实用的。

对于简单的数组,实用遍历是最常见的方法。

function removeDuplicatedItem(array) {
    let ret = [];

    for (let i = 0; i < array.length; i++) {
        if (ret.indexOf(array[i]) === -1) {
            ret.push(array[i]);
        }
    }

    return ret;
}

如果需要来点复杂的,那么可以将排序引入。

function removeDuplicatedSortedItem(array) {
    var ret = [],
        end;
    array.sort();
    end = array[0];
    ret.push(array[0]);

    for (var i = 1; i < array.length; i++) {
        if (array[i] != end) {
            ret.push(array[i]);
            end = array[i];
        }
    }

    return ret;
}

与时俱进是要付出一些代价的。
以下则是利用了Map类型。Map对象保存键值对,任何值(对象或者原始值) 都可以作为一个键或一个值。

function removeDuplicatedMapItem(array) {
    const res = new Map();
    return array.filter((element) => !res.has(element) && res.set(element, 1))
    // filter() 方法创建一个新的数组,新数组中的元素 是 通过检查 指定数组 中 符合条件的所有元素。
}

有时候,简单是一种美德:

function removeDuplicatedSetItem(array) {
    return Array.from(new Set(array));
}

针对每一项是复杂类型,可以通过遍历来完成

function uniqFilter(array, key) {
  return array.reduce(function(accelerator, current){

    if (!accelerator.find(element => element[key] === current[key])){
      accelerator.push(current);
    }

    return accelerator;
  }, []);
}

还有更多去重的方法等待挖掘,我们要做的是,高效、可用、美好。

发表评论

电子邮件地址不会被公开。 必填项已用*标注