gpt4 book ai didi

javascript - 通过索引从嵌套数组中删除项目(递归)

转载 作者:行者123 更新时间:2023-12-03 05:58:37 25 4
gpt4 key购买 nike

我有一个嵌套对象数组。这些对象采用以下两种形式之一:

// type a
{
value: 'some value'
}

// type b
{
array: [
object of type a or b,
object of type a or b,
...
]
}

因此,基本数组可以无限嵌套。给定一系列索引(我一直将其称为“树”),如何删除任意深度的单个项目?

到目前为止我所拥有的示例:

const baseArray = [
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ value: 'some value' },
],
},
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ array: [
{ value: 'delete me' },
{ value: 'some value' },
]
},
],
},
],
}
]

const tree = [1, 3, 1, 0]

function deleteNested(tree, inputArray) {
const index = tree.shift();
console.log(inputArray, index);
const child = inputArray[index].array;
if (tree.length > 0) {
console.log(child)
return deleteNested(tree, child);
}
return [
...inputArray.slice(0, index),
...inputArray.slice(index + 1)
]
}
const originalArray = baseArray.slice(0);
console.log(deleteNested(tree, baseArray), originalArray);

我想删除给定“树”位置的标记对象:[1, 3, 1, 0]:

  • 首先,查看初始数组的 1(索引 1,而不是 0)值,
  • 然后是 3 值,
  • 然后查看 1 值,
  • 然后最后删除 0 值。

我上面的内容不起作用,但已经让我开始了。

该函数需要递归才能在任何深度工作。理想情况下,它不应该使用 splice() 来避免修改传递给它的数组 - 相反,它应该返回一个新数组。

最佳答案

正如我在评论中所说,如果您提前知道迭代次数,则不应使用递归方法。 while 循环是理想的选择,例如;

function delNestedItem(a,dm){
var i = 0;
while (i < dm.length-1) a = a[dm[i++]].array;
a.splice(dm[i],1);
}

var data = [
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ value: 'some value' },
],
},
{ value: 'some value' },
{ array: [
{ value: 'some value' },
{ array: [
{ value: 'delete me' },
{ value: 'some value' },
]
},
],
},
],
}
],

delMark = [1, 3, 1, 0];
delNestedItem(data,delMark);
console.log(JSON.stringify(data,null,2));

关于javascript - 通过索引从嵌套数组中删除项目(递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39826549/

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