繁体   English   中英

Javascript:将对象添加到具有相同键的现有对象数组不起作用

[英]Javascript: Add object to Existing Array of objects with the same key not working

我正在尝试将newList添加到Grouped Array 中,其中Grouped Array 名称与newList name 相同。 例如,将“Dairy and Eggs”对象从newList连接到Grouped Array 。 这在所需的输出中得到了证明。

我尝试过的:

const existingCatrgory = Grouped.findIndex(
    item => item.name === 'Spices' || 'Dairy and Eggs' || 'Produce'
);

if (existingCatrgory >= 0) {
    const findShoppingCategory = Grouped.filter(x => x.name === 'Spices' || 'Dairy and Eggs' || 'Produce')
    const merge = findShoppingCategory.map((element) => {
        return {
            ...element,
            data: element.data.concat(newList)
        };
    });
} else {
    return Grouped.concat(newList)
}

这是新newList

const newList = [{
        data: [{
            value: "whipped cream"
        }, ],
        name: "Dairy and Eggs",
    },
    {
        data: [{
            value: "mushrooms",
        }],
        name: "Produce",
    }
]

这是Grouped Array

const Grouped = [{
        data: [{
            value: "paprika",
        }, ],
        name: "Spices",
    },
    {
        data: [
            {value: "milk"},
            {value: "Blue cheese"},
        ],
        name: "Dairy and Eggs",
    },
];

期望输出:

const Output = [{
    data: [
        { value: "paprika" },],
    name: "Spices",
},
{
    data: [
        { value: "milk" },
        { value: "Blue cheese" },
        { value: "whipped cream" },
    ],
    name: "Dairy and Eggs"
},
{
    data: [
        { value: "mushrooms" }
    ],
    name: "Produce",
}
];

这是一种方法:

 const Grouped = [{ data: [{ value: "paprika", }, ], name: "Spices" }, { data: [ {value: "milk"}, {value: "Blue cheese"}, ], name: "Dairy and Eggs" }, ]; const newList = [{ data: [{ value: "whipped cream" }, ], name: "Dairy and Eggs" }, { data: [{ value: "mushrooms", }], name: "Produce" } ] const mergedList = JSON.parse(JSON.stringify(Grouped)); newList.forEach(function(item){ let thisGroup = mergedList.filter(g => g.name == item.name); if (thisGroup.length > 0) { for (let i = 0; i < item.data.length; i++) { thisGroup[0].data.push({"value": item.data[i].value}); } } else { mergedList.push(item); } }) console.log(mergedList);

只需遍历每个新项目并检查名称是否已存在,如果存在,则将新的 data.value 附加到现有数据列表中。 如果它不存在,请为该项目创建一个新条目。

根据要求,我更新了代码以包括获取 Grouped 数组的副本并将其合并到其中。 由于 Grouped 数组具有简单的结构,因此我使用 JSON 将其字符串化并将其解析回一个新数组。

这是另一个使用 findIndex 并创建新项目或添加到现有数据的解决方案。

newList.forEach(newItem =>{
    let index = Grouped.findIndex(item => item.name ===newItem.name)
    if(index===-1){
        Grouped.push(newItem)
    }else{
        Grouped[index].data.push(...newItem.data)
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM