如何修改n维数组元素的值,其中索引由Javascript中的数组指定

我有一个 n 维数组,我想使用另一个数组来访问/修改其中的一个元素来指定索引。


我想出了如何访问一个值,但是我不知道如何修改原始值。


// Arbitrary values and shape

arr = [[[8, 5, 8],

        [9, 9, 9],

        [0, 0, 1]],


       [[7, 8, 2],

        [9, 8, 3],

        [9, 5, 6]]];


// Arbitrary values and length

index = [1, 2, 0];


// The following finds the value of arr[1][2][0]

// Where [1][2][0] is specified by the array "index"


tmp=arr.concat();


for(i = 0; i < index.length - 1; i++){

  tmp = tmp[index[i]];

}


// The correct result of 9 is returned

result = tmp[index[index.length - 1]];

  1. 如何修改数组中的值?

  2. 是否有更好/更有效的方法来访问值?


桃花长相依
浏览 112回答 3
3回答

喵喵时光机

这是一个经典的递归算法,因为每个步骤都包含相同的算法:从索引中弹出第一个索引。继续使用新弹出的索引指向的数组。直到你到达最后一个元素indices- 然后替换最低级别数组中的相关元素。function getUpdatedArray(inputArray, indices, valueToReplace) {&nbsp; const ans = [...inputArray];&nbsp; const nextIndices = [...indices];&nbsp; const currIndex = nextIndices.shift();&nbsp; let newValue = valueToReplace;&nbsp; if (nextIndices.length > 0) {&nbsp; &nbsp; newValue = getUpdatedArray(&nbsp; &nbsp; &nbsp; inputArray[currIndex],&nbsp; &nbsp; &nbsp; nextIndices,&nbsp; &nbsp; &nbsp; valueToReplace,&nbsp; &nbsp; );&nbsp; } else if (Array.isArray(inputArray[currIndex])) {&nbsp; &nbsp; throw new Error('Indices array points an array');&nbsp; }&nbsp; ans.splice(currIndex, 1, newValue);&nbsp; return ans;}const arr = [&nbsp; [&nbsp; &nbsp; [8, 5, 8],&nbsp; &nbsp; [9, 9, 9],&nbsp; &nbsp; [0, 0, 1]&nbsp; ],&nbsp; [&nbsp; &nbsp; [7, 8, 2],&nbsp; &nbsp; [9, 8, 3],&nbsp; &nbsp; [9, 5, 6]&nbsp; ]];const indices = [1, 2, 0];const newArr = getUpdatedArray(arr, indices, 100)console.log(newArr);

蝴蝶刀刀

您可以像这样更改数组中的值,arr[x][y][z]&nbsp;=&nbsp;value;这有帮助吗?

慕田峪9158850

我认为您正在寻找的是:arr[index[0]][index[1]][index[2]]&nbsp;=&nbsp;value;我无法理解您在示例的第二部分中尝试做什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript