Ответ 1
Интересно, можно ли получить правильный результат при помощи однострочника...
var randoms = [...Array(4)].map(() => Math.floor(Math.random() * 9));
document.body.innerText = randoms;
Следуя этому ответу для создания массива указанной длины, я выполнил ниже, чтобы получить соответствующий результат, но заполненный случайными числами, вместо нулей.
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]
Интересно, можно ли получить правильный результат при помощи однострочника...
var randoms = [...Array(4)].map(() => Math.floor(Math.random() * 9));
document.body.innerText = randoms;
Что делает 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>
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]
Краткий и простой подход ES6 -
// randomly generated n = 4 length array 0 <= array[n] <= 9
var randoms = Array.from({length: 4}, () => Math.floor(Math.random() * 10));
Наслаждайтесь!
'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));
...
Решение из массива случайных уникальных чисел
const uniqRandomNumbers = _.sampleSize(_.range(9), 4);
console.log(uniqRandomNumbers);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>