开发者

Updating an array of objects in javascript

I have an array of javascript objects like the following:

var food = [
    {id: 1, name: 'Apples', owned: true },
    {id: 2, name: 'Oranges', owned: false },
    {id: 3, name: 'Bananas', owned: true }
];

Then I receive another array with the following data:

var newFood = [
    {id: 1, name: 'Peas'},
    {id: 2, name: 'Oranges'},
    {id: 3, name: 'Bananas'},
    {id: 4, name: 'Grapefruits'}
];

How can I update the previous food array with the new information in newF开发者_开发技巧eed, without overwriting the original owned property, while adding an owned: false to any new object?

Keep in mind this is plain javascript, not jQuery.


You'd probably want to index food by id so make food an object instead of an array:

var food = {
1: {name: "Apples", owned: true},
//...
}

then iterate over newFood and update the fields appropriately.


I think you can use underscore.js for fix the problem.

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);


This works:

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 });
    }
}

The first for statement will populate the temp object with the fruit names from the food array, so that we know which fruits exist in it. In this case, temp will be this:

{ "Apples": true, "Oranges": true, "Bananas": true } 

Then, the second for statement checks for each fruit in newFood if that fruit exists in temp, and if it doesn't, if pushes a new array item into the food array.


some thing like this? JSFiddle Example

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];
        }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜