#javascript #arrays
#javascript #массивы
Вопрос:
Допустим, я хочу создать массив со случайным размером:
const generateNumber = (min, max) =>
Math.floor(Math.random() * (max - min 1)) Math.floor(min);
const array = Array(generateNumber(5, 10));
и для четных индексов массива поместите числа из диапазона <a, b>, а для нечетного индекса поместите число из диапазона <c, d>.
Пока у меня есть код, подобный:
const array = Array(generateNumber(5, 10));
for (let [index, val] of array.entries()) {
if (index % 2 === 0) { // index is even
array.push(generateNumber(10, 10));
}
if (index % 2 === !0) {
array.push(generateNumber(30, 30))
}
}
console.log(array)
но я получаю результат:
[ <5 empty items>, 10, 10, 10, 10, 10 ]
Я новичок в JavaScript, и я немного смущен тем, что я делаю неправильно. Я буду благодарен за предложения о том, как решить проблему.
РЕДАКТИРОВАТЬ: я неправильно понял push()
предположение о методе. Приведенный ниже код работает так, как ожидалось:
for (let [index, val] of arr.entries()) {
if (index % 2 !== 0) {
console.log("Index: %O", index)
arr.splice(index, 1, generateNumber(10, 20));
} else {
arr.splice(index, 1, generateNumber(20, 30));
}
}
console.log("Generated array: %O", arr)
for (let index in arr) {
if (index % 2 !== 0) {
arr.splice(parseInt(index), 1, generateNumber(30, 60));
} else {
arr.splice(parseInt(index), 1, generateNumber(20, 50));
}
}
Спасибо за вашу приверженность.
Комментарии:
1.
Array(5)
генерирует массив, дляlength
которого уже установлено значение 5, и нажатие на массив просто добавляет элементы с индексом {текущая длина 1}. Присваивайте элементы напрямую через индекс.2. И
if (index % 2 === !0)
так не работает, вы отрицаете сравнение с помощью оператора negated, а не отрицаете одно из значений. Это должно было бы бытьif (index % 2 !== 0)
, но поскольку существует только одна возможная альтернатива первомуif
здесь, вам лучше начать с создания, чем сelse
ветки.