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

2024-01-02

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

  1. 如果名字来自inputArray与 匹配storedArray姓名和年龄相同,则不执行任何操作storedArray但将该物体保留在storedArray。 (例如约翰)。
  2. 如果名字来自inputArray与 匹配storedArray姓名和年龄不相同,则仅更新旧对象中的年龄值storedArray。 (例如简)。
  3. 如果里面有一个新对象inputArray使用与任何 in 都不匹配的不同名称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}
];

to this:

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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce随着Array#find https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法用另一个对象数组更新一个对象数组 的相关文章

随机推荐