Javascript - 在对象数组中查找(而不是删除)具有重复属性的元素

标签 javascript mapreduce

我想获取一个对象数组,检查多个属性是否同时重复。最后,重复的元素应该被提醒。即对于数组:

[
  {
    "language" : "english",
    "type" : "a",
    "value" : "value1"
  },
  {
    "language" : "english",
    "type" : "a",
    "value" : "value2"
  },
  {
    "language" : "english",
    "type" : "b",
    "value" : "value3"
  },    
  {
    "language" : "spanish",
    "type" : "a",
    "value" : "valor1"
  }
];

警告应该是:“语言英语和类型a的元素过多”

我一直在寻找它,但答案要么是使 VisualStudio2015 生气的肮脏的 map/reduce 实现,要么是找到完整的副本(不仅基于特定属性)

最佳答案

在性能方面,我认为最好的选择是迭代列表的每个元素,同时更新遇到的键的计数器。

您想在 counter == 2 时发出警报。您不应该测试 counter > 1,因为当您有超过 2 对具有相同语言和相同类型时,它会重复多次相同的警报。

var list = [{
    "language" : "english",
    "type" : "a",
    "value" : "value1"
  },{
    "language" : "english",
    "type" : "a",
    "value" : "value2"
  },{
    "language" : "english",
    "type" : "a",
    "value" : "value3"
  },{
    "language" : "english",
    "type" : "b",
    "value" : "value3"
  },{
    "language" : "spanish",
    "type" : "a",
    "value" : "valor1"
  },{
    "language" : "spanish",
    "type" : "a",
    "value" : "valor2"
}];

var counter = {};

list.forEach(function(o) {
  var key = o.language + '|' + o.type;
  if((counter[key] = (counter[key] || 0) + 1) == 2) {
    console.log('Too many elements with language '+o.language+' and type '+o.type);
  }
});

关于Javascript - 在对象数组中查找(而不是删除)具有重复属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687685/

相关文章:

javascript - 抓取图像高度并将其设置为其容器 jquery

javascript - 为什么我无法从单选按钮获取值?

hadoop - 使用mapreduce列表中连续元素的差异

hadoop - Hadoop作业自动化

hadoop - reducer 可以动态使用多个节点吗?

hadoop - Hadoop映射器阶段停留在19%之后,在这种情况下会发生这种可能性?

hadoop - 无法将大于 100 MB 的文件加载到 HDFS 中

javascript - 如何缩短 Javascript 来关闭 (.popup) div?

javascript - JQuery 未注册按钮点击

javascript - 如何在悬停另一个 HTML 元素时创建平滑缩放并显示叠加层?