Js lodash каждый раз возвращает один и тот же образец
Я хочу генерировать сэмплы с помощью lodash, и он возвращает мне одинаковые числа для каждой строки. что я делаю не так?
var primaryNumsCells = _.range(50);
var extraNumsCells = _.range(20);
var lottery = {lineConfigurations: []};
var numsConfig = {lineNumbers: {}};
for( var i = 0; i < 2; i ++ ) {
numsConfig.lineNumbers.primaryNumbers = _.sample(primaryNumsCells, 5);
numsConfig.lineNumbers.secondaryNumbers = _.sample(extraNumsCells, 2);
lottery.lineConfigurations.push(numsConfig);
}
console.log(lottery);
Результаты первого объекта и второго объекта первичных и вторичных чисел одинаковы;
вот скрипка: http://jsbin.com/vavuhunupi/1/edit
1 ответ
Решение
Создайте новый объект внутри цикла. Это легко сделать с простым литералом объекта (отбрасывая переменную):
var lottery = {lineConfigurations: []};
for (var i = 0; i < 2; i++) {
lottery.lineConfigurations.push({
lineNumbers: {
primaryNumbers: _.sample(primaryNumsCells, 5),
secondaryNumbers: _.sample(extraNumsCells, 2)
}
});
}
На каждом этапе цикла вы изменяете и нажимаете один и тот же объект (хранится в numsConfig
вар).
И здесь идет один из способов сделать то же самое:
var lottery = {
lineConfigurations: _.map(_.range(2), function() {
return {
lineNumbers: {
primaryNumbers: _.sample(primaryNumsCells, 5),
secondaryNumbers: _.sample(extraNumsCells, 2)
}
};
})
};