JavaScript: возможно ли обновить значение элемента массива с помощью forEach? - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу перебрать массив чисел, и если любое из этих чисел будет одной цифрой, добавьте 0 перед ним, например, 1 становится 01.

Я мог бы сделать это с помощьюfor цикл, но мне было интересно, смогу ли я использовать forEach, как кажется, аккуратнее.

Кто-нибудь знает, можно ли это сделать?

Мой код пока:

  numArr.forEach(function(item) {
    if (item < 10) {
      item = '0' + item; // How do I update this value in array?
    }
  });

Ответы [ 5 ]

0 голосов
/ 26 февраля 2019

вы можете использовать padStart и map

var cont = [1, 2, 3, 4, 5, 6, 7, 10, 11, 12];
var result = cont.map((o)=>{ return o.toString().padStart('2', 0);});

console.log(result);
0 голосов
/ 26 февраля 2019

Вы можете использовать map,

var numArr = [1, 2, 3,10,11];
numArr = numArr.map(function(item) {
   if (item < 10) {
      return item = '0' + item;;
    }
  return item.toString() ;
});
console.log(numArr);

Еще одна возможность - использовать forEach с двумя параметрами (второй параметр будет индексным),

var numArr = [1, 2, 3,10,11];
numArr.forEach(function(item,index) {
   if (item < 10) {
      numArr[index] = '0' + item;
    }
  
});

console.log(numArr);
0 голосов
/ 26 февраля 2019

Вы можете отобразить массив с помощью Array#map и преобразовать значение в строку и блок с требуемой длиной и значением.

var numArr = [1, 2, 3, 10],
    zeroes = numArr.map(v => v.toString().padStart(2, '0'));

console.log(zeroes);
0 голосов
/ 26 февраля 2019

Если вы хотите изменить свой массив на месте, тогда Array.forEach() - это путь, и вам придется использовать индекс для этого, который является вторым аргументом вашего обратного вызова.

Однако, если вы хотите сгенерировать новый массив, я предлагаю использовать Array.map(), который возвращает новый элемент для каждой итерации:

const numArr = [-1, 0, 1, 2, 3, 10, 11, 12, 100, 3.14];

const prefix = x => {
  const s = `0${x.toString().replace('-', '')}`;
  return s.split('.')[0].length >= 3 ? `${x}` : `${x < 0 ? '-' : ''}${s}`;
}

const result = numArr.map(prefix);

numArr.forEach((x, i) => numArr[i] = prefix(x));

console.log(result);
console.log(numArr);
0 голосов
/ 26 февраля 2019

Вы передаете index в качестве второго параметра в функцию обработчика событий и используете это index для изменения элемента в массиве:

numArr.forEach(function(item, i) {
  if (item < 10) {
    numArr[i] = '0' + item; // How do I update this value in array?
  }
});

Вы также можете использоватьmap():

numArr = numArr.map(function(item, i) =>  {
  if (item < 10) {
    item = '0' + item; // How do I update this value in array?
  }
  return item;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...