我有一个Javascript对象,其形状如下:
obj = {
'any': [
'someString',
{
'all': [
'another',
'andAnother',
{
'any': [
'user',
'id',
{
'all': [
'yes',
'no'
]
}
]
}
]
},
'test'
]
}
上面的对象只是一个例子。基本上,所有对象都必须有“all”或“any”键和一个值,该值是一个仅包含字符串或对象的数组。每个数组只能有一个对象。对象可以或多或少地复杂,但必须遵循这种结构。
我想根据如下格式的字符串(或数组或数组组成的数组-> )从复杂对象中删除元素:
"[any][1][all][2][any][2][all][1]"
anyallanyall定义了字符串'no‘在对象中的位置,因此应该将其删除。(obj[any][1][all][2][any][2][all][1] === 'no'
)
我希望这是有意义的。
发布于 2018-10-29 08:05:00
到目前为止,如果输入是一组键,这将是最简单的。然后,可以使用reduce
遍历它们,每次访问累加器的适当键,传入初始值的输入对象。一旦到达倒数第二个键,就有了数组-使用splice
删除所需索引处的项:
const obj = {
'any': [
'someString',
{
'all': [
'another',
'andAnother',
{
'any': [
'user',
'id',
{
'all': [
'yes',
'no'
]
}
]
}
]
},
'test'
]
};
const removePath = ['any', 1, 'all', 2, 'any', 2, 'all', 1];
const indexToSplice = removePath.pop();
const arr = removePath.reduce((a, key) => a[key], obj);
arr.splice(indexToSplice, 1);
console.log(obj);
https://stackoverflow.com/questions/53037132
复制相似问题