Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用angularjs或javascript的两个对象数组的交集_Javascript_Angularjs - Fatal编程技术网

使用angularjs或javascript的两个对象数组的交集

使用angularjs或javascript的两个对象数组的交集,javascript,angularjs,Javascript,Angularjs,我想: var list01 = [ { date: **01/01/2015**, statut: [1,2,6], name: '**Name X**' }, { date: **01/01/2015**, statut: [5,6], name: '**Name X**' }, { date: 01/01/2016, statut: [5,6], nam

我想:

var list01 = [
   {
      date: **01/01/2015**,
      statut: [1,2,6],
      name: '**Name X**'
   },
   {
      date: **01/01/2015**,
      statut: [5,6],
      name: '**Name X**'
   },
   {
      date: 01/01/2016,
      statut: [5,6],
      name: 'Name Y'
   },
   ...
]
我想生成list02,它包含list01中具有相同名称和日期的所有项目

var list02 = [
   {
      date: 01/01/2015,
      name: 'Name x',
      **nbrItem: 2**
   },
   {
      date: 01/01/2016,
      statut: [5,6],
      name: 'Name Y',
      **nbrItem: 1**
   },
   ...
]

我想要一个更好的方法来解决这个问题

请看我是否做了你想要的。基本思想是在开始时创建一个空列表,然后在原始列表中循环。对于原始列表中的每个项目,请查看新列表中是否已存在匹配的项目。如果是,则增加
nbridem
属性。否则,创建一个新对象。链接小提琴的内脏如下所示:

var len = list01.length;
var list02 = [];
for (var i = 0; i < len; i++) {
    var foundMatch = false;
    var len2 = list02.length;
    for (var j = 0; j < len2; j++) {
        if (list02[j].date == list01[i].date && list02[j].name == list01[i].name) {
            foundMatch = true;
            list02[j].nbrItem++;
            break;
        }
    }

    if (!foundMatch) {
        list02.push( {
            date: list01[i].date,
            name: list01[i].name,
            nbrItem: 1
        });
    }
}
var len=list01.length;
var list02=[];
对于(变量i=0;i
Array.prototype.map
在这种情况下并不适合,因为您希望输出的长度与输入的长度不同。此处显示的方法仅使用普通的old for循环,它适用于所有浏览器,即使是没有编辑
映射的真正的旧浏览器:

var list02=[];
列表01.forEach(功能(项目){
var matched=list02.filter(函数filterItem){
返回filterItem.name==item.name&&filterItem.date==item.date
})
如果(匹配的长度)
匹配的[0]。项++
其他的
list02.push({
日期:item.date,
名称:item.name,
项目:1
});
});

“解决此问题的更好方法”。。。比什么好?当前正在做什么?如果您希望克隆对象,可能会对您有所帮助。此外,请定义“更好”-执行速度更快?更容易阅读?谢谢。这对我来说并不明显。我已经编辑了我的问题。list02必须重新组合日期和名称相同的项目我完全重写了我的答案。如果这是你想要的,请告诉我。非常感谢我的朋友,但你必须只在列表中添加具有相同名称和日期的项目02是的,这正是它正在做的,与Austin的答案相同,但他的答案对于大型阵列将更有效。啊,好的,它工作得很好。。。非常感谢。