gpt4 book ai didi

javascript - 从数组中删除对象或嵌套对象

转载 作者:行者123 更新时间:2023-12-03 00:41:31 24 4
gpt4 key购买 nike

我需要从给定的对象 ID 中删除数组中的对象或嵌套对象。

需要删除的对象既可以是数组中的根对象,也可以是根对象之一中的嵌套对象(本例中的变体)。

这是数组结构(根对象和变体对象都有唯一的 ID):

[
{ id: 1, title: 'object without variants', variants: [] },
{ id: 2, title: 'object with variants', variants: [{ id: 21, title: 'variant 1' }, { id: 22, title: 'variant 2' }]
]

例如,如果触发删除函数的点击事件传递的对象ID是1,我想删除整个ID为1的根对象,如果点击事件传递的对象是21,我只需要删除想要删除ID为2的根对象下ID为21的变体,而不是整个根对象。

如何做到这一点?

更新我通过使用以下代码使其工作(passedObjectId 是要删除的对象的 ID):

array = array.filter(object => object.id !== passedObjectId);

for (let object of array) {
object.variants = object.variants.filter(variant => variant.id !== passedObjectId);
}

如果从对象中删除了最后一个变体,我还需要从数组中删除根对象。

下面的代码可以工作,但是我可以在不使用 3 个 filter() 方法的情况下使其变得更漂亮吗?

array = array.filter(object => object.id !== passedObjectId);

for (let object of array) {
// Remove the variant from the root object
object.variants = object.variants.filter(variant => variant.id !== passedObjectId);

// Remove the root object, if there's no variants left in it
if (!object.variants.length) {
array = array.filter(object => object.id !== passedObjectId);
}
}

另一更新

我最终使用了这段代码,如果最后一个变体被删除,它也会删除根对象:

array = array.filter(object => {
const hasRemovedVariant = object.variants.some(variant => variant.id === passedObjectId);

if (hasRemovedVariant) {
object.variants = object.variants.filter(variant => variant.id !== passedObjectId);

return object.variants.length;
}

return object.id !== passedObjectId;
});

最佳答案

这是一个关于如何单独删除它们的示例,我让你将它们放在一起。如果您有任何疑问或遇到困难,请随时询问。

const original = [{
id: 1,
title: 'object without variants',
variants: [],
},
{
id: 2,
title: 'object with variants',

variants: [{
id: 21,
title: 'variant 1'
}, {
id: 22,
title: 'variant 2'
}],
},
{
id: 3,
title: 'object with one variant',

variants: [{
id: 21,
title: 'variant 1'
}],
}
];

// Remove the root id
const rootIdToDelete = 1;

const modifiedRoot = original.filter(x => x.id !== rootIdToDelete);

// Remove the variant id
const variantToDelete = 21;

const modifiedRootAndVariant = modifiedRoot.filter((x) => {
x.variants = x.variants.filter(x => x.id !== variantToDelete);

// Keep only the roots that have at least 1 variant
return x.variants.length;
});

console.log(modifiedRootAndVariant);

关于javascript - 从数组中删除对象或嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444521/

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