Подтвердить что ты не робот

Создание массива длины n со случайными номерами в JavaScript

Следуя этому ответу для создания массива указанной длины, я выполнил ниже, чтобы получить соответствующий результат, но заполненный случайными числами, вместо нулей.

var randoms = Array(4).fill(Math.floor(Math.random() * 9));

Ну, математически говоря он случайный, все в порядке. Но я бы хотел, чтобы случайность была видна внутри массива, и не только между прогонами, конечно. Глупый компьютер... Не делай того, что я говорю. Делайте то, что я хочу!

Я могу повторить и поместить его в свои случайные (и меняющиеся) значения. Но я удивляюсь, из чистого любопытства, если можно получить правильный результат с помощью однострочного, как и выше, MatLab-стиля. Мне нужно вызвать eval (function()...)? Я слышал много плохих вещей об eval...

Обратите внимание, что вышеприведенный код выглядит следующим образом:

[7, 7, 7, 7]
[3, 3, 3, 3]

и т.д.. в то время как я хочу что-то вроде

[1, 2, 3, 4]
[4, 3, 8, 4]

4b9b3361

Ответ 1

  Интересно, можно ли получить правильный результат при помощи однострочника...

var randoms = [...Array(4)].map(() => Math.floor(Math.random() * 9));

document.body.innerText = randoms;

Ответ 2

Что делает Array#fill do?

Согласно MDN

Метод fill() заполняет все элементы массива от индекса начала до конечного индекса со статическим значением.

Вы можете использовать Function#apply, Array#map, Math.floor(), Math.random().

В ES6 Array#from и Функция стрелки могут быть использованы.

Array.from({length: 6}, () => Math.floor(Math.random() * 9));

Array.apply(null, Array(6)).map(() => Math.floor(Math.random() * 9));удаp >

var randomArr = Array.from({length: 6}, () => Math.floor(Math.random() * 9));

document.getElementById('result').innerHTML = JSON.stringify(randomArr, 0, 4); // For demo only
<pre id="result"></pre>

Ответ 3

var randoms = Array(4).fill(Math.floor(Math.random() * 9));

Эта строка кода создаст список из 4 одинакового номера, потому что fill принимает одно значение и повторяет его для длины списка. То, что вы хотите сделать, - это запустить генератор случайных чисел каждый раз:

var makeARandomNumber = function(){
    return Math.floor(Math.random() * 9);
}
var randoms = Array(5).fill(0).map(makeARandomNumber);
console.log(randoms)
// => [4, 4, 3, 2, 6]

https://jsfiddle.net/t4jtjcde/

Ответ 4

Краткий и простой подход ES6 -

// randomly generated n = 4 length array 0 <= array[n] <= 9
var randoms = Array.from({length: 4}, () => Math.floor(Math.random() * 10));

Наслаждайтесь!

Ответ 5

'const t = Array.from({length: n}, mapArrowFx);

1) const t10 = Array.from({length: 10}, (v, k) => k); [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] const t10 = Array.from({length: 10}, (v, k) => k); [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2) const tEven = Array.from({length: 10}, (v, k) => 2*k); [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] const tEven = Array.from({length: 10}, (v, k) => 2*k); [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

........

3)

let n=100; const tRandom= Array.from({length: n}, (v, k) => Math.floor(Math.random()*n));

...