从JS数组中移除重复值

2348

我有一个非常简单的JavaScript数组,可能包含重复项。

var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];

我需要删除重复项并将唯一值放入一个新数组。

我可以指出我尝试过的所有代码,但我认为这没有用,因为它们不起作用。我接受jQuery解决方案。

类似问题:


95
_.uniq(peoplenames) 解决了这个问题。请参考 http://lodash.com/docs#uniq 了解更多信息。 - Connor Leech
10
@ConnorLeech 使用 lodash 很容易,但这不是最优化的方式。 - Suhail Mumtaz Awan
45
我认为最简单的方法是使用Set对象,它可以存储任何类型的唯一值。换句话说,Set会自动帮我们删除重复的元素。`const names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];let unique = [...new Set(names)]; console.log(unique); // 'Mike', 'Matt', 'Nancy', 'Adam', 'Jenny', 'Carl'` - Asif vora
13
世界上有太多叫Mike的人了——为什么不把他们移除掉呢?Nancy在这件事上被打败了。 - toad
3
在我的解决方案中,我会在过滤之前对数据进行排序:const result = data.sort().filter((v, idx, t) => idx==0 || v != t[idx-1]); - Didier68
显示剩余10条评论
54个回答

0
function removeDuplicates (array) {
  var sorted = array.slice().sort()
  var result = []

  sorted.forEach((item, index) => {
    if (sorted[index + 1] !== item) {
      result.push(item)
    }
  })
  return result
}

0
aLinks是一个简单的JavaScript数组对象。如果在索引显示重复记录之前存在任何元素,则删除该元素。我重申要取消所有重复项。一个数组可以取消多个记录。
var srt_ = 0;
var pos_ = 0;
do {
    var srt_ = 0;
    for (var i in aLinks) {
        pos_ = aLinks.indexOf(aLinks[i].valueOf(), 0);
        if (pos_ < i) {
            delete aLinks[i];
            srt_++;
        }
    }
} while (srt_ != 0);

-1
var uniqueCompnies = function(companyArray) {
    var arrayUniqueCompnies = [],
        found, x, y;

    for (x = 0; x < companyArray.length; x++) {
        found = undefined;
        for (y = 0; y < arrayUniqueCompnies.length; y++) {
            if (companyArray[x] === arrayUniqueCompnies[y]) {
                found = true;
                break;
            }
        }

        if ( ! found) {
            arrayUniqueCompnies.push(companyArray[x]);
        }
    }

    return arrayUniqueCompnies;
}

var arr = [
    "Adobe Systems Incorporated",
    "IBX",
    "IBX",
    "BlackRock, Inc.",
    "BlackRock, Inc.",
];

1
请对整篇文章进行格式化。 - Alexey Subach

-8

ES2015,1行代码,与map很好地链接在一起,但仅适用于整数:

[1, 4, 1].sort().filter((current, next) => current !== next)

[1, 4]

这适用于任何东西,但只会删除连续的重复项。例如:[1,1,2,2,3,3] -> [1,2,3] 但是 [1,2,3,1,2,3] -> [1,2,3,1,2,3] - Kroltan
3
@Kroltan 实际上问题并不是关于连续的重复,而是关于理解传递给 filter 的参数:它是 (value, index) 而不是 (current, next),所以对于 [1,4,1] 可行,但对于 [2,4,2] 就不行了... - Xenos
@Xenos 你说得对!我看得太快了 xD - Kroltan
我认为这种方法很好,而且可以轻松地适用于其他类型的数组,只需稍作修改:["1", "4", "1"].sort().filter((value, index, array) => value !== array[index + 1]) - scipper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接