我有一个带有一些嵌套数组的rootArray,它可以是任意深度。
我想动态访问由索引列表定义的某个内部数组,以将新内容推送到那里。 例如,如果索引列表是
for item in soup.select('div', {'class': 'page-numbers clearfix'}):
for link in item.select('a', href=True):
print(link['href'])
我想...
currentFocusedArray = [1,2]
动态而非硬连线。
也许这是树木不让我看到森林的情况,或者我处于死胡同。
我只是在做一个简单的笔记应用程序,反应非常简单。
https://codesandbox.io/embed/quirky-gauss-09i1h
欢迎任何建议! 希望我没有浪费你的时间。预先感谢。
答案 0 :(得分:1)
您可以编写find数组以根据您的焦点数组获取数组。 使用数组方法reduce从索引数组中查找节点
var updateNode = focus.reduce((node,index) => node && node[index], notes);
updateNode && updateNode.push("new content");
答案 1 :(得分:0)
您可以使用for循环来实现它。
let myArray = rootArray
for(let i = 0; i < currentFocusedArray.length; i++){
myArray = myArray[currentFocusedArray[i]]
}
此后,您将myArray
引用rootArray
的深层嵌套值。
let rootArray = {
"1": {
"2": []
}
}
let currentFocusedArray = [1, 2]
let myArray = rootArray
for(let i = 0; i < currentFocusedArray.length; i++){
myArray = myArray[currentFocusedArray[i]]
}
myArray.push("new content")
console.log(myArray)
答案 2 :(得分:0)
您可以使用reduce
创建可在任何级别设置嵌套数组元素的函数。
const rootArray = []
function set(arr, index, value) {
index.reduce((r, e, i, a) => {
if (!r[e]) {
if (a[i + 1]) r[e] = []
} else if (!Array.isArray(r[e])) {
if (a[i + 1]) {
r[e] = [r[e]]
}
}
if (!a[i + 1]) {
if (Array.isArray(r)) {
r[e] = value
}
}
return r[e]
}, arr)
}
set(rootArray, [1, 2], 'foo');
set(rootArray, [1, 1, 2], 'bar');
set(rootArray, [1, 2, 2], 'baz');
console.log(JSON.stringify(rootArray))