在javascript中的两个数组列表中找不到匹配项时更改数据

时间:2016-06-15 12:33:39

标签: javascript

我有2个数组列表

数组1

var array1=[{default:true ,name:"type"},{default:true ,name:"id"},{default:true ,name:"status"}]

数组2

var array2=[{default:true ,name:"id"},{default:true ,name:"status"}]

现在我想要第三个数组,例如

ARRAY3

var array3=[{default:false ,name:"type"}]

其中name不匹配,其默认值应为false

2 个答案:

答案 0 :(得分:0)

仅从array1找到缺失的值:

var array1=[{default:true ,name:"type"},{default:true ,name:"id"},{default:true ,name:"status"}];

var array2=[{default:true ,name:"id"},{default:true ,name:"status"}]

var array3 = array1.filter(function(val){
  return array2.filter(function(val2){ return val.name == val2.name }).length == 0;
}).map(function(v) {
  return {default:false, name:v.name};
});

console.log(array3);

要从array1 array2中查找缺失的值:

var array1=[{default:true ,name:"type"},{default:true ,name:"id"},{default:true ,name:"status"}];

var array2=[{default:true ,name:"id"},{default:true ,name:"status"}]

var array3 = array1.filter(function(val){
  return array2.filter(function(val2){ return val.name == val2.name }).length == 0;
}).concat(array2.filter(function(val){
  return array1.filter(function(val2){ return val.name == val2.name }).length == 0;
})).map(function(v) {
  return {default:false, name:v.name};
})

console.log(array3);

答案 1 :(得分:0)

您可以创建一个哈希表,并将其作为参考,哪些项​​应该在结果数组中。

var array1 = [{ default: true, name: "type" }, { default: true, name: "id" }, { default: true, name: "status" }],
    array2 = [{ default: true, name: "id" }, { default: true, name: "status" }],
    hash = Object.create(null),
    result = [];

array2.forEach(function (a) {
    hash[a.name] = true;
});

array1.forEach(function (a) {
    hash[a.name] || result.push({ default: false, name: a.name });
});
    
console.log(result);