更新或向列表添加值

Baz*_*Baz 1 javascript

您将如何更新inventory(基于名称)或添加名称未找到.

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];
Run Code Online (Sandbox Code Playgroud)

例如,以下内容将更新库存:

const fruit = {name: 'bananas', quantity: 1}
inventory = inventory.map(f => f.name===fruit.name ? fruit : f);
Run Code Online (Sandbox Code Playgroud)

这可以用来添加到库存:

const fruit = {name: 'oranges', quantity: 2}
if (!inventory.find(f => f.name===fruit.name)) inventory.push(fruit)
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种可以做到这两者的解决方案,如果可能的话,最好使用箭头功能而不是索引.

Ori*_*iol 5

你可以使用findIndex:

var idx = inventory.findIndex(f => f.name === fruit.name);
inventory[idx < 0 ? inventory.length : idx] = fruit;
Run Code Online (Sandbox Code Playgroud)

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

var fruit = {name: 'bananas', quantity: 1}

var idx = inventory.findIndex(f => f.name === fruit.name);
inventory[idx < 0 ? inventory.length : idx] = fruit;

var fruit = {name: 'oranges', quantity: 2}

var idx = inventory.findIndex(f => f.name === fruit.name);
inventory[idx < 0 ? inventory.length : idx] = fruit;

console.log(inventory);
Run Code Online (Sandbox Code Playgroud)

如果您想要合并两个对象数组(而不是单个对象到数组),那么这种方法将是二次的.您应该看到JavaScript通过id合并对象.