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

我有一个带有一些嵌套数组的 rootArray,它可以是任何深度。

我想动态访问由索引列表定义的某个内部数组,以将新内容推送到那里。例如,如果索引列表是

currentFocusedArray = [1,2]

我想要...

rootArray[1][2].push('new content')

动态的,而不是硬连线的。

也许这是树木不让我看到森林的情况,或者我在死胡同里。

我只是做一个简单的笔记应用程序,带有反应,非常简单。

https://codesandbox.io/embed/quirky-gauss-09i1h

欢迎任何建议!希望我没有浪费你的时间。提前致谢。


胡子哥哥
浏览 176回答 3
3回答

收到一只叮咚

您可以编写 find 数组以根据您的焦点数组获取数组。使用数组方法reduce从索引数组中查找节点var updateNode = focus.reduce((node,index) => node && node[index], notes);updateNode && updateNode.push("new content");

largeQ

您可以使用 for 循环来实现。let myArray = rootArrayfor(let i = 0; i < currentFocusedArray.length; i++){&nbsp; &nbsp; myArray = myArray[currentFocusedArray[i]]}在此之后,您将myArray引用 的深层嵌套值rootArray。let rootArray = {&nbsp; &nbsp; "1": {&nbsp; &nbsp; &nbsp; &nbsp; "2": []&nbsp; &nbsp; }}&nbsp;let currentFocusedArray = [1, 2]&nbsp;let myArray = rootArrayfor(let i = 0; i < currentFocusedArray.length; i++){&nbsp; &nbsp; myArray = myArray[currentFocusedArray[i]]}myArray.push("new content")console.log(myArray)

PIPIONE

您可以使用reduce创建这样的函数来在任何级别设置嵌套数组元素。const rootArray = []function set(arr, index, value) {&nbsp; index.reduce((r, e, i, a) => {&nbsp; &nbsp; if (!r[e]) {&nbsp; &nbsp; &nbsp; if (a[i + 1]) r[e] = []&nbsp; &nbsp; } else if (!Array.isArray(r[e])) {&nbsp; &nbsp; &nbsp; if (a[i + 1]) {&nbsp; &nbsp; &nbsp; &nbsp; r[e] = [r[e]]&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if (!a[i + 1]) {&nbsp; &nbsp; &nbsp; if (Array.isArray(r)) {&nbsp; &nbsp; &nbsp; &nbsp; r[e] = value&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return r[e]&nbsp; }, arr)}set(rootArray, [1, 2], 'foo');set(rootArray, [1, 1, 2], 'bar');set(rootArray, [1, 2, 2], 'baz');console.log(JSON.stringify(rootArray))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript