如果json对象中的键相同,则替换值

时间:2015-07-30 18:03:42

标签: javascript jquery

我有以下由json对象组成的数组:

items = [{"Id":"car","color":"blue"},{"Id":"truck","color":"red"}]

我有新的json对象。如果此对象的“Id”(newItem)与项目中的“Id”匹配,我想替换“颜色”值。

newItem = {"Id":"car","color":"yellow"}

所以,我想输出如下:

items = [{"Id":"car","color":"yellow"},{"Id":"truck","color":"red"}] 

这是我到目前为止所拥有的:

for (var i=0; i<items.length; i++)
{
            var x = items[i];

            if(x.Id == newItem.Id){    //first check if id matches  
                if (JSON.stringify(items[i]) == JSON.stringify(newItem))  { 
                    alert('objects are same');                        
                    return ;           
                } 
                else {
                    var newColor = JSON.stringify(x).replace(x.color, newItem.color);
                    alert(JSON.parse(newColor));

                }
            }            
}

6 个答案:

答案 0 :(得分:7)

工作JSFiddle。以下是使用Array.prototype.forEach中的.forEach

的一种方法
var items = [{"Id":"car","color":"blue"},{"Id":"truck","color":"red"}];
var newItem = {"Id":"car","color":"yellow"}

items.forEach(function(item) {
  if (newItem.Id === item.Id) {
    item.color = newItem.color
  }
});

答案 1 :(得分:3)

试试这个:

items.forEach(function(item) {
    if(item.Id == newItem.Id && item.color != newItem.color){
        item.color = newItem.color;
    }            
});

答案 2 :(得分:2)

检查工作演示:JSFiddle

使用Array.prototype.map简洁明了:

items.map(function(obj) {
    (obj.Id === newItem.Id) && (obj.color = newItem.color);
});

答案 3 :(得分:2)

这是一种使用jQuery的方法:

var items = [
  {"Id": "car", "color": "blue"},
  {"Id": "truck", "color": "red"}
];

var newItem = {
  "Id": "car",
  "color": "yellow"
};


$(items).each(function(item) {
  if ($(this)[0].Id == newItem.Id) {
    $(this)[0].color = newItem.color
  }
}); 

答案 4 :(得分:2)

对于这个特定问题,Underscore.js库并不是绝对必要的,但它对于处理集合非常有用。

var items = [{"Id":"car","color":"blue"},{"Id":"truck","color":"red"}];
var newItem = {"Id":"car","color":"yellow"};

_.each(items, function(item) {
  if (item.Id === newItem.Id) item.color = newItem.color
});

答案 5 :(得分:1)

以下代码应该适合您。一旦id匹配,您可以退出循环。性能稍好一点。

items = [{"Id":"car","color":"blue"},{"Id":"truck","color":"red"}];

newItem = {"Id":"car","color":"yellow"};

for (var i = 0; i < items.length; i++){
    if (newItem.id == items[i].id ){
        items[i].color = newItem.color;
        break;
    }
}