如何动态访问数组中的索引?

时间:2019-06-03 12:03:53

标签: javascript arrays

我有一个带有一些嵌套数组的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

欢迎任何建议! 希望我没有浪费你的时间。预先感谢。

3 个答案:

答案 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))