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

问题描述 投票:1回答:3

我有一个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. 是否有更好/更有效的方法来访问值?

javascript arrays multidimensional-array
3个回答
2
投票

这是经典的递归算法,因为每个步骤都包含相同的算法:

  • 从索引中弹出第一个索引。
  • 继续使用新弹出的索引指向的数组。

直到找到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);

1
投票

您可以像这样更改数组中的值,

arr[x][y][z] = value;

有帮助吗?


0
投票

我认为您正在寻找的是这个:

arr[index[0]][index[1]][index[2]] = value;

我在示例的第二部分中难以理解您要执行的操作。

© www.soinside.com 2019 - 2024. All rights reserved.