Javascript:移动数组中的元素,但基于另一个数组数据

问题描述 投票:0回答:2

这就是我想要做的。我有一个包含 4 个元素的数组 arr。不能多也不能少。我有另一个名为 shiftAmounts 的数组。 所以这就是我所拥有的以及我正在寻找的结果......

arr[A, B, C, D]
shiftAmounts[0, 1, 1, 3]
result:  arr[A,"Empty", B, C]

所以从右边(第四元素)开始吧

我已经为你做了一个功能,可以达到你想要的结果

function shiftArray(arr, shiftAmounts) {
  for (let i = 3; i >= 0; i--) {
    const shift = shiftAmounts[i];
    if (shift === 0) continue;

    const newIndex = i + shift;
    if (newIndex >= 4) {
      arr.splice(i, 1);
      continue;
    }

    arr[newIndex] = arr[i];
    arr[i] = "Empty";
  }
  return arr;
}

const arr = ["A", "B", "C", "D"];
const shiftAmounts = [0, 1, 1, 3];
const result = shiftArray(arr, shiftAmounts);
console.log(result);

将数组的每个元素映射到元素列表和新位置。

然后,使用

Object.fromEntries
将该数组视为键值对列表并从中创建一个对象,然后使用
Array.from
将其转换为数组。

Array.from
的第二个参数是一个箭头函数,它用字符串 'Empty' 替换缺失的数组元素。

const arr = ['A', 'B', 'C', 'D']
const shiftAmounts = [0, 1, 1, 3]

const r = Array.from({
  length: arr.length,
  ...Object.fromEntries(arr.map((e,i) => [i+shiftAmounts[i], e]))
}, e => e ?? 'Empty')

console.log(r)

javascript arrays move
2个回答
1
投票

1
投票

将数组的每个元素映射到元素列表和新位置。

然后,使用

Object.fromEntries
将该数组视为键值对列表并从中创建一个对象,然后使用
Array.from
将其转换为数组。

Array.from
的第二个参数是一个箭头函数,它用字符串 'Empty' 替换缺失的数组元素。

const arr = ['A', 'B', 'C', 'D']
const shiftAmounts = [0, 1, 1, 3]

const r = Array.from({
  length: arr.length,
  ...Object.fromEntries(arr.map((e,i) => [i+shiftAmounts[i], e]))
}, e => e ?? 'Empty')

console.log(r)

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