这就是我想要做的。我有一个包含 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)
将数组的每个元素映射到元素列表和新位置。
然后,使用
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)