Вот что я пытаюсь сделать. У меня есть Array Arr со строго 4 элементами. не может иметь больше и не может иметь меньше. У меня есть другой массив с именем shiftAmounts. Итак, вот что у меня есть и результат, который я ищу...
arr[A, B, C, D]
shiftAmounts[0, 1, 1, 3]
result: arr[A,"Empty", B, C]
Итак, начиная справа (четвертые элементы), это важно, я должен переместить D вправо на 3 пробела. Поскольку у меня не может быть больше 4 элементов, то он удаляется Затем C перемещается на один пробел вправо Затем буква B перемещается на одну позицию вправо. Далее A не двигается, потому что у него 0. Элементы никогда не пересекаются друг с другом. Изменение должно быть на месте. спс за вашу помощь Себи
я сделал для вас функцию, которая может достичь желаемого результата
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.info(result);
Очень хорошо, спасибо, единственная проблема, которую я вижу, заключается в том, что если я использую [3,3,3,3] или [4,4,4,4], я получаю неопределенный вместо пустого. У тебя та же проблема?
Сопоставьте каждый элемент массива со списком элементов и новых позиций.
Затем используйте Object.fromEntries
, чтобы обработать этот массив как список пар ключ-значение и создать из них объект, а затем использовать Array.from
, чтобы преобразовать его в массив. Обратите внимание, что Array.from
автоматически исключает элементы в позициях, превышающих указанную длину массива.
Второй параметр Array.from
— это стрелочная функция, которая заменяет отсутствующие элементы массива строкой «Пусто».
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.info(r)
Привет, спасибо, как использовать это как функцию?
@seby Просто объявите function shiftArr(arr, shiftAmounts) { }
и поместите мой код, за которым следует return r
внутри
нет, действительно слово Пусто