用相同的键替换/更改项目

时间:2015-03-02 21:11:29

标签: javascript underscore.js

使用下划线,我有一个像这样的对象数组 -

myObj = [{"car" : "red" },{"tree" : "green"}];

我正在传递一个我需要查找的新对象并用相同的密钥覆盖一个对象,所以我会像

一样发送
 {"car" : "blue" };

我必须把原始物体改成蓝色。这可能是下划线吗?谢谢!

编辑 - 为了清楚,我被给予{“car”:“blue”}并且我需要将它与原始对象进行比较并找到“car”并将其替换为新值。谢谢!

2 个答案:

答案 0 :(得分:2)

不确定。假设您的所有对象只有一个键:

var myArr = [ { "car" : "red" }, { "tree": "green" } ];

// First, find out the name of the key you're going to replace
var newObj = { "car": "blue" };
var newObjKey = Object.keys(newObj)[0]; // => "car"

// Next, get the index of the array item that has the key
var index = _.findIndex(myArr, function(obj) { return newObjKey in obj; });
// => 0

// Finally, replace the value
myArr[index][newObjKey] = newObj[newObjKey];

FYI findIndex是Underscore.js 1.8功能。如果您使用的是较旧版本的Underscore,则需要使用以下内容替换该行:

var index;

_.find(myObj, function(obj, idx) {
  if("car" in obj) {
    index = idx;
    return true;
  }
});

答案 1 :(得分:0)

你可以做到这一点的另一种方式如下

myObj = [{"car" : "red" },{"tree" : "green"}];

let object2 = {"car": "blue"}

for(let obj of myObj){
  for(let key in obj){
    object2[key] ? obj[key] = object2[key] : ''
  }
}

这应该动态替换object2中与数组myObj中对象中的键匹配的任何内容

不需要任何额外的库或疯狂的变量:)只是老式的javascript

编辑 围绕for循环包含if(object2 && Object.keys(object2)){}之类的内容可能不是一个坏主意,只是为了确保object2不是空的/未定义