javascript嵌套数组更新

时间:2018-02-01 13:19:45

标签: javascript arrays

我有一个填充如下的javascript数组:

var orderDetails = [];
    orderDetails.push({
    City: "ABQ",
    Banana: 5,
    Mango:12
    });

我正在浏览一系列城市。我希望能够查看这个数组,看看这个城市是否存在,如果存在,更新香蕉和芒果的数量。如果它不存在,我想将该城市的新城市和香蕉和芒果计数推入阵列。

有人能告诉我这是怎么做到的吗?注意:我使用的是服务器端javascript。

非常感谢。

2 个答案:

答案 0 :(得分:2)

如果对象已经在您的数组中,您可以使用array.prototype.find

function update(arr, obj) {
    var found = arr.find(o => o.City === obj.City);
    if (found) {
        found.Banana += obj.Banana;
        found.Mango += obj.Mango;
    } else {
        arr.push(obj);
    }
}

var orderDetails = [];
update(orderDetails, {City: "ABQ", Banana: 5, Mango:12});
update(orderDetails, {City: "XXX", Banana: 1, Mango:3});
update(orderDetails, {City: "ABQ", Banana: 5, Mango:12});

console.log(orderDetails);

答案 1 :(得分:0)

您可以在循环浏览城市列表时搜索城市。如果你找到它,你可以更新这两个值,否则你可以推送一个新对象。

cities.forEach(city => {
    var found = orderDetails.find(detail => detail.City === city.name);
    if (found) {
        found.Banana += city.banana;
        found.Mango += city.mango;
    } else {
        orderDetails.push({
            City: city.name,
            Banana: city.banana,
            Mango: city.mango,
        });
    }
});