我有必要修改一个嵌套的对象数组结构,该结构始终具有相同的模式,只知道访问我想要更改的特定对象的索引。
JSON 数组示例:
[
{
"name":"bob",
"age":5,
"subRows":[
{
"name":"paul",
"age":10,
"subRows":[]
},
{
"name":"claire",
"age":20,
"subRows":[
{
"name":"carl",
"age":40,
"subRows":[]
}
]
}
}
]
我需要动态删除一个每次都可能不同的对象,比如说名为“carl”的对象,因此要达到预期的结果:
[
{
"name":"bob",
"age":5,
"subRows":[
{
"name":"paul",
"age":10,
"subRows":[]
},
{
"name":"claire",
"age":20,
"subRows":[]
}
}
]
了解Json结构的所有索引来访问它:
let indexesArray = [0, 1, 0];
我已经尝试过这个:
const deleteObject = (jsonData, indexesArray) =>{
let pathToDelete = "jsonData[indexesArray[0]]";
for(let i=1; i<indexesArray.length(); i++){
pathToDelete += ".subRows["i"]";
]
pathToDelete = []; //empty the array removing "carl" object
return jsonData;
}
如何让 javascript 处理动态创建的变量 pathTodelete 以删除特定对象?有更好的方法吗(当然,我的代码不起作用)?
最佳答案
您可以在索引数组上使用reduce
方法,当找到最后一个索引并找到匹配项时,您可以使用splice
通过索引从数组中删除该元素> 方法。
const data = [{"name":"bob","age":5,"subRows":[{"name":"paul","age":10,"subRows":[]},{"name":"claire","age":20,"subRows":[{"name":"carl","age":40,"subRows":[]}]}]}]
let indexesArray = [0, 1, 0];
indexesArray.reduce((r, e, i, a) => {
const match = r[e];
if (a.length == i + 1 && match) r.splice(e, 1)
else if (match) return match.subRows;
return {}
}, data)
console.log(data)
关于javascript - 修改动态嵌套数组,只知道要访问的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65239709/