gpt4 book ai didi

javascript - 无法使用另一个对象数组更新对象数组

转载 作者:行者123 更新时间:2023-12-05 00:45:49 25 4
gpt4 key购买 nike

我有两个不同的对象数组,storedArray 存储在我的文件系统中,inputArray 是根据用户输入来更新 storedArray。每个数组的最小长度为 1,最大数量没有上限。此外,它们不一定必须具有相同的长度。所以我想要的是遍历每个数组并且:

  1. 如果 inputArray 中的名称与 storedArray 名称匹配且年龄相同,则在 storedArray 中不执行任何操作,但将该对象保留在 存储数组。 (例如约翰)。
  2. 如果 inputArray 中的名称与 storedArray 名称匹配且年龄不同,则仅更新 storedArray 中旧对象中的年龄值. (例如简)。
  3. 如果 inputArray 中有一个新对象,其名称与 storedArray 中的任何名称都不匹配,则将新对象推送到 storedArray 。 (例如莫里斯)。
  4. 必须删除 storedArray 中与 inputArray 不匹配的其他对象。 (例如乔安娜、吉姆)。

更新这个

const storedArray = [
{"name": "John", "age": 25, "courses": 5},
{"name": "Jane", "age": 21, "courses": 3},
{"name": "Joanna", "age": 19, "courses": 2},
{"name": "Jim", "age": 20, "courses": 4},
];

从这里

const inputArray = [
{"name": "Jane", "age": 23, "courses": 0},
{"name": "John", "age": 25, "courses": 0},
{"name": "Morris", "age": 18, "courses": 0}
];

到这里:

const storedArray = [
{"name": "John", "age": 25, "courses": 5},
{"name": "Jane", "age": 23, "courses": 3},
{"name": "Morris", "age": 18, "courses": 0}
];

我用 for of 循环尝试了这个,但我得到了 22 个结果。其中一些失踪了。此外,我通过将它插入一个新数组来尝试它。 SO中还有其他标题相同的帖子,但最终目标与我的不匹配。但是我还是尝试了他们的代码,但还是不行。

这是我尝试过的:

const storedArray = [
{"name": "John", "age": 25, "courses": 5},
{"name": "Jane", "age": 21, "courses": 3},
{"name": "Joanna", "age": 19, "courses": 2},
{"name": "Jim", "age": 20, "courses": 4}
];

const inputArray = [
{"name": "Jane", "age": 23, "courses": 0},
{"name": "John", "age": 25, "courses": 0},
{"name": "Morris", "age": 18, "courses": 0}
];

let newArray = [];

for(let item of storedArray) {
for(let each of inputArray) {
if(item.name === each.name && item.age === each.age){
newArray.push(item);
}else if(item.name === each.name && item.age !== each.age) {
item.age = each.age;
newArray.push(item);
}else if(item.name !== each.name){
newArray.push(each);
newArray.push(item);
}
}
}

console.log(newArray);

最佳答案

您可以使用 Array#reduce连同 Array#find找到存储的匹配对象。对于输入数组中的每个元素,我们尝试在存储的数组中找到对应的元素(同名)。如果没有找到,我们将当前元素插入累加器数组。否则,我们在推送之前使用输入数组元素中的年龄更新年龄。

const storedArray = [
{"name": "John", "age": 25, "courses": 5},
{"name": "Jane", "age": 21, "courses": 3},
{"name": "Joanna", "age": 19, "courses": 2},
{"name": "Jim", "age": 20, "courses": 4},
];
const inputArray = [
{"name": "Jane", "age": 23, "courses": 0},
{"name": "John", "age": 25, "courses": 0},
{"name": "Morris", "age": 18, "courses": 0}
];
const res = inputArray.reduce((acc,curr)=>{
const stored = storedArray.find(({name})=>name===curr.name);
if(stored){
stored.age = curr.age;
acc.push(stored);
} else {
acc.push(curr);
}
return acc;
}, []);
console.log(res);

关于javascript - 无法使用另一个对象数组更新对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62918608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com