【发布时间】:2016-06-07 09:05:05
【问题描述】:
我试图找到一种从随机数组中获取值而不重复它们的方法,我找到了以下解决方案:
var letters = ["A", "B", "C"];
var getRandom = (function(array) {
var notGivenItems = array.map(function(el) {
return el;
});
var getIndex = function() {
return Math.floor(Math.random() * notGivenItems.length);
};
return function() {
if (notGivenItems.length === 0) {
return;
}
return notGivenItems.splice(getIndex(), 1)[0];
};
})(letters);
console.log(getRandom());
console.log(getRandom());
console.log(getRandom());
console.log(getRandom());
如果我打印console.log() 4 次,最后,数组显示为undefined,这正是我需要的。但是,我需要 (function () {... 不要自动触发,因为来自 AJAX 的值。所以,应该是这样的:
function selec() {
var getRandom = (function(array) {
var notGivenItems = array.map(function(el) {
return el;
});
var getIndex = function() {
return Math.floor(Math.random() * notGivenItems.length);
};
return function() {
if (notGivenItems.length === 0) {
return;
}
return notGivenItems.splice(getIndex(), 1)[0];
};
})(letters);
return getRandom();
}
console.log(selec());
然后,函数继续连续打印值,不返回undefined。
【问题讨论】:
-
您是在内部声明
letters还是在外部selec()声明? -
Out,因为如果在里面,当再次运行
select()时,letters恢复到原来的格式。 -
每次调用
selec()时,都会从letters重新初始化array。 -
because the value that comes via AJAX... 哪个值?letters?另外,当您致电console.log(selec());时,您究竟期待什么? -
“来自 AJAX”是什么意思?你的第一个功能应该是一样的
标签: javascript arrays function random