0

我需要从 javascript 对象中选择并打印 5 个随机键/值对。目前我像这样遍历对象:

        $.each(object, function(key, val) {
                 ...
        });

但是我怎么能从这个对象中打印 5 个随机键值对呢?问题是我不知道这个对象的长度,所以我无法通过计算随机起始位置并从那里开始获取 5 对来做到这一点。

4

3 回答 3

3

查找对象中的项目数并不难。你只需要使用Object.keys. 这将获取一个包含对象中所有键名的数组。

var keys = Object.keys(object),
    length = keys.length;

然后您可能会想要随机选择项目,可能是这样的:

var i,
    result = [];
for (i = 0; i < 5; i++) {
    result.push(object[keys[Math.floor(Math.random() * length)]]);
}
于 2013-02-21T10:08:39.797 回答
0

Object.keys(object)会给你一个对象中所有键的数组

var arrayOfAllKeys = Object.keys(object);
for(var i=0; i<5; i++){
    var rnd = Math.floor(Math.random()*arrayOfAllKeys.length);
    var objKey = arrayofAllKeys[rnd];
    alert( "key: " + objKey + " value: " + object[objKey]);
}

您可以使用以下方法模拟 Object.keys(object):

var arrayOfKeys = [];
$.each(object, function(key, value){
    arrayOfKeys.push(key);
}
于 2013-02-21T10:08:46.547 回答
0

如果对象不是太大,您可以将数据复制到常规数组中并打乱它:

function fisherYates(array){
    var i=array.length;
    while(i--){
        var j=Math.floor( Math.random() * (i+1) );
        var tmp=array[i];
        array[i]=array[j];
        array[j]=tmp;
    }
}

var object = {
    firstName: "Jim",
    lastName: "Smith",
    city: "London",
    country: "UK",
    age: 33,
    height: 170,
    score: 123,
    active: true
}

var deck = [];
$.each(object, function(key, val){
    var o = {};
    o[key] = val;
    deck.push(o);
});

fisherYates(deck);

var selection = deck.slice(0, 5);
console.log(selection);
于 2013-02-21T10:10:04.447 回答