我想创建一个从某个时间间隔生成随机整数的函数,每次调用它时都应该生成一个唯一的函数。为此,我创建了这个generateUniqueInt
。
function generateUniqueInt() {
var res = Math.floor(Math.random() * 100);
while (generateUniqueInt.used.indexOf(res) !== -1)
res = Math.floor(Math.random() * 100);
generateUniqueInt.used.push(res);
return res;
}
generateUniqueInt.used = new Array;
for (let i = 0; i < 20; i++) {
console.log(generateUniqueInt());
}
generateUniqueInt.used.sort();
console.log(generateUniqueInt.used);
&#13;
我这样调用了几次这个函数并且它有效。
然后我想检查实际生成了哪些值,为了便于检查,我对used
属性进行了排序。但看起来,used
不再是一个数组了。
我尝试过使用generateUniqueInt.used = [];
以及Object.defineProperty
,但结果每次都相同。我在这里错过了什么?有没有办法将used
创建为数组?
答案 0 :(得分:2)
您的问题是:The default sort order is according to string Unicode code points.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
以下代码将返回以下输出:
var array1 = [1, 30, 4, 21];
array1.sort();
console.log(array1);
// expected output: Array [1, 21, 30, 4]
为了解决数字问题,您可以按照MDN的例子进行操作:
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]
因此,您的示例将成为以下应该为您提供正确的所需输出:
generateUniqueInt.used.sort(function(a,b){ return a - b});
答案 1 :(得分:2)
默认情况下,sort方法按字母顺序对元素进行排序,因此您的数组将按[1,2,25,3,4 ...]
使用它来排序数字数组:
generateUniqueInt.used.sort(function(a,b){ return a - b});
let arr = [4,2,65,12,23,5,3]
let sorted1 = arr.sort()
console.log('sorted alphabetically : ', JSON.stringify(sorted1))
let sorted2 = arr.sort(function(a,b){ return a - b})
console.log('sorted numerically : ', JSON.stringify(sorted2))