【问题标题】:I need to combine 2 simple arrays and remove duplicates [duplicate]我需要组合 2 个简单的数组并删除重复项 [重复]
【发布时间】:2013-08-22 23:01:24
【问题描述】:

我有 2 个简单的数组需要组合和排序,很简单。但是随后需要删除重复项。

oldProgrammers = new Array('Rob', 'Neek', 'Lisa', 'Susan');
newProgrammers = new Array('Brett', 'John', 'Tom', 'Lisa');

allProgrammers = oldProgrammers.concat(newProgrammers).sort();

allProgrammers.forEach(function(arrEl){
    alert(arrEl);
})

我不知道这是怎么做到的?!

【问题讨论】:

  • 您可以遍历每对连续的元素,一旦找到匹配的两个,使用 .splice(indexFirstDuplicate,2) 删除它们

标签: javascript arrays


【解决方案1】:

您可以利用字典数据结构

memo = {};
oldProgrammers.map(function(i){memo[i] = 1;});
newProgrammers.map(function(i){memo[i] = 1;});
allProgrammers = Object.keys(memo);

map() 从 Javascript 1.8 开始可用,Object.keys() 应该在 Chrome 5 之后可用。

但是所有真正的浏览器都支持它:)

【讨论】:

  • 这仅适用于字符串,因为属性名称会自动强制转换为 String
  • @nmaier 他询问关于合并 2 个字符串集合的问题。
  • 我从来没有说过他没有 ;) 仍然想说明这一点,以避免在他尝试将其与其他东西一起使用时让他稍后返回。
【解决方案2】:

您可以将它们全部混合在一起(并在运行中对其进行排序),然后使用http://underscorejs.org/#uniq 处理它们

uniq_.uniq(array, [isSorted], [iterator]) 别名:唯一

生成数组的无重复版本,使用 === 来测试对象是否相等。如果您事先知道数组已排序,则为 isSorted 传递 true 将运行更快的算法。如果您想根据转换计算唯一项,请传递一个迭代器函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2022-07-22
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多