Javascript: перемещать элементы в массиве, но на основе данных другого массива

Вот что я пытаюсь сделать. У меня есть 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. Элементы никогда не пересекаются друг с другом. Изменение должно быть на месте. спс за вашу помощь Себи

нет, действительно слово Пусто

Seby 20.04.2023 00:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

я сделал для вас функцию, которая может достичь желаемого результата

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], я получаю неопределенный вместо пустого. У тебя та же проблема?

Seby 20.04.2023 05:03

Сопоставьте каждый элемент массива со списком элементов и новых позиций.

Затем используйте 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 20.04.2023 01:44

@seby Просто объявите function shiftArr(arr, shiftAmounts) { } и поместите мой код, за которым следует return r внутри

Andrew Parks 20.04.2023 03:10

Другие вопросы по теме