如何将属性添加到另一个数组中不存在的元素数组中

时间:2017-09-16 09:18:37

标签: javascript

我有一个对象数组: -

var arr1 = [{
    "name": "A"
}, {
    "name": "B"
}, {
    "name": "C"
}, {
    "name": "D"
}];

我想为第二个数组中不存在的每个元素添加一个新属性。

var arr2 = [C,D]

结果数组应为: -

arr1 = [{
    "name": "A",
    "country":"USA"
}, {
    "name": "B",
    "country":"USA"
}, {
    "name": "C"
}, {
    "name": "D"
}];

任何人都可以告诉我如何实现这个目标吗?

2 个答案:

答案 0 :(得分:6)

  

我想为第二个数组中不存在的每个元素添加一个新属性。

完全会更改您最初提出的问题。

如果项目是可变的,您只需循环遍历数组,将属性添加到所选项目。有many ways to do that,例如forEach

arr1.forEach(function(item) {
    if (arr2.indexOf(item.name) === -1) {
        item.country = "USA";
    }
});

直播示例:

var arr1 = [{
    "name": "A"
}, {
    "name": "B"
}, {
    "name": "C"
}, {
    "name": "D"
}];

var arr2 = ["C", "D"];

arr1.forEach(function(item) {
    if (arr2.indexOf(item.name) === -1) {
        item.country = "USA";
    }
});
console.log(arr1);

如果它们是不可变的,则使用map代替:

arr1 = arr1.map(function(item) {
    if (arr2.indexOf(item.name) === -1) {
        return /*...create item with `country = "USA"` here...*/;
    } else {
        return item;
    }
});

直播示例:

var arr1 = [{
    "name": "A"
}, {
    "name": "B"
}, {
    "name": "C"
}, {
    "name": "D"
}];

var arr2 = ["C", "D"];

arr1 = arr1.map(function(item) {
    if (arr2.indexOf(item.name) === -1) {
        return {name: item.name, country: "USA"};
    } else {
        return item;
    }
});
console.log(arr1);

原始回答(至your original question

您可以在添加属性的结果数组上循环。有many ways to do that,例如forEach

arr1.forEach(function(item) {
    item.country = "USA";
});

从技术上讲,可以使其成为filter的副作用,如下所示:

var arr1 = arr1.filter(function(item){
  if (arr2.indexOf(item.name) === -1) {
    item.country = "USA";
    return true;
  };
  return false;
});

filter回调(及类似)中的副作用通常不是一个好主意。除非你知道结果数组(arr1)是成千上万的条目,否则第二遍通过过滤然后修改来保持简单。

答案 1 :(得分:0)

使用Array.forEach并添加属性(如果元素不存在) - 使用您已使用的相同比较。