我有一个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]];
如何修改数组中的值?
是否有更好/更有效的方法来访问值?
这是经典的递归算法,因为每个步骤都包含相同的算法:
直到找到indices
中的最后一个元素-然后替换最低层数组中的相关元素。
function getUpdatedArray(inputArray, indices, valueToReplace) {
const ans = [...inputArray];
const nextIndices = [...indices];
const currIndex = nextIndices.shift();
let newValue = valueToReplace;
if (nextIndices.length > 0) {
newValue = getUpdatedArray(
inputArray[currIndex],
nextIndices,
valueToReplace,
);
} else if (Array.isArray(inputArray[currIndex])) {
throw new Error('Indices array points an array');
}
ans.splice(currIndex, 1, newValue);
return ans;
}
const arr = [
[
[8, 5, 8],
[9, 9, 9],
[0, 0, 1]
],
[
[7, 8, 2],
[9, 8, 3],
[9, 5, 6]
]
];
const indices = [1, 2, 0];
const newArr = getUpdatedArray(arr, indices, 100)
console.log(newArr);
您可以像这样更改数组中的值,
arr[x][y][z] = value;
有帮助吗?
我认为您正在寻找的是这个:
arr[index[0]][index[1]][index[2]] = value;
我在示例的第二部分中难以理解您要执行的操作。