Итерировать по массиву и заменять на определенное значение - PullRequest
0 голосов
/ 29 августа 2018

У меня есть вопрос о целесообразности моего кода. Я уверен, что есть лучший и более эффективный способ написания написанной мной функции.

Это функция :

let i;
for (i = 0; i < ns.length; i++) {
  if (ns[i] > 1) {
    ns[i] = 3;
    const place = ns[i];
    ns.splice(place + 2, 1, 4);
    ns.splice(place, 1, 2);
    ns.splice(place - 1, 1, 1);
  }
}

Начальный массив (длина этого массива до 20 элементов):

ns = [1 , 1 , 1 , 1 , 2 , 0]

Массив результатов:

ns = [1 , 1 , 1 , 2 , 3 , 4]

Верьте или нет, но это подойдет моим потребностям. Но есть ли лучший способ, чем просто сложить три раза сращивания? Это также расширяет мой массив, если номер два исходного массива находится в конце или в начале. Я знаю, что могу просто обернуть это в другое условие, но мне это кажется таким неуклюжим


Заранее спасибо!
Привет

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Итак, с помощью Нины Шольц и Друга я получил правильный ответ:

Начальный массив:

["1", "1", "1", "1", "1", "2", "0", "0"]

Требуемый массив:

["1", "1", "1", "1", "2", "3", "4", "0"]

Функция:

   isSibling() {
    const siblings = this.props.data.map(item => (
      item.progress
    ));
    let i;
    const place = '3';
    for (i = 0; i < siblings.length; i++) {
      if (siblings[i] === '2') {
        const num = i;
        siblings[i] = place;
        this.update(siblings, i - 1, '2');
        this.update(siblings, i + 1, '4');
        return siblings;
      }
    }
    return siblings;
   }

Функция обновления:
чтобы убедиться, что массив не удлинен и не укорочен:

  update(array, index, value) {
    if (index >= 0 && index < array.length) {
      array[index] = value;
    }
  }

Спасибо за вашу помощь! : D

0 голосов
/ 29 августа 2018

Вы можете заменить сплайсинг удалением одного значения и добавлением одного значения простым присвоением индекса.

Для предотвращения обновления значений при не заданных индексах вы можете воспользоваться функцией, которая проверяет требуемый индекс и обновляет только заданные индексы.

function update(array, index, value) {
    if (index >= 0 && index < array.length) {
        array[index] = value;
    }
}
var ns = [1, 1, 1, 1, 2, 0],
    length = ns.length,
    i,
    place = 3;
    
for (i = 0; i < length; i++) {
    if (ns[i] > 1) {
        ns[i] = place;
        update(ns, place - 1, 1);
        update(ns, place, 2);
        update(ns, place + 2, 4);
    }
}

console.log(ns);
...