我有一系列javascript对象,如下所示:
var food = [
{id: 1, name: 'Apples', owned: true },
{id: 2, name: 'Oranges', owned: false },
{id: 3, name: 'Bananas', owned: true }
];
然后我收到另一个包含以下数据的数组:
var newFood = [
{id: 1, name: 'Peas'},
{id: 2, name: 'Oranges'},
{id: 3, name: 'Bananas'},
{id: 4, name: 'Grapefruits'}
];
如何使用food
,中的新信息更新以前的newFeed
数组,而覆盖原始owned
属性,同时添加{{1任何新对象?
请记住,这是简单的javascript,而不是jQuery。
答案 0 :(得分:5)
你可能想要通过id索引食物,所以把食物变成对象而不是数组:
var food = {
1: {name: "Apples", owned: true},
//...
}
然后迭代newFood并适当更新字段。
答案 1 :(得分:3)
我认为您可以使用underscore.js来解决问题。
var arrayObj = [
{Name:'John',LastName:'Smith'},
{Name:'Peter',LastName:'Jordan'},
{Name:'Mike',LastName:'Tyson'}
];
var element = _.findWhere(arrayObj, { Name: 'Mike' });
element.Name="SuperMike";
console.log(arrayObj);
答案 2 :(得分:0)
这有效:
var temp = {};
for (var i = 0, l = food.length; i < l; i += 1) {
temp[food[i].name] = true;
}
for (var i = 0, l = newFood.length; i < l; i += 1) {
if ( !temp[newFood[i].name] ) {
food.push( { id: food.length + 1, name: newFood[i].name, owned: false });
}
}
第一个for
语句将使用temp
数组中的水果名称填充food
对象,以便我们知道其中存在哪些水果。在这种情况下,temp
将是:
{ "Apples": true, "Oranges": true, "Bananas": true }
然后,第二个for
语句检查newFood
中的每个水果,如果该水果存在于temp
中,如果不存在,则检查新的数组项是否{ {1}}数组。
答案 3 :(得分:0)
的JavaScript
function updateFood( newFood, oldFood ) {
var foodLength = oldFood.length - 1;
for (var i = 0; i < newFood.length; i++) {
if (i > foodLength) { //add more if needed
newFood[i].owned = false;
oldFood.push(newFood[i]);
} else if (!food[i].owned) { //replace if needed
newFood[i].owned = false;
oldFood[i] = newFood[i];
}
}
}