如何在javascript中创建数组作为属性?

时间:2018-04-09 15:57:39

标签: javascript arrays

我想创建一个从某个时间间隔生成随机整数的函数,每次调用它时都应该生成一个唯一的函数。为此,我创建了这个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;
&#13;
&#13;

我这样调用了几次这个函数并且它有效。 然后我想检查实际生成了哪些值,为了便于检查,我对used属性进行了排序。但看起来,used不再是一个数组了。

我尝试过使用generateUniqueInt.used = [];以及Object.defineProperty,但结果每次都相同。我在这里错过了什么?有没有办法将used创建为数组?

2 个答案:

答案 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))