从一个javascript对象中打印5个随机键/值对

print 5 random key/value pairs from a javascript object

本文关键字:5个 打印 随机 值对 对象 javascript 一个      更新时间:2023-09-26

我需要选择&从一个javascript对象中打印5个随机键/值对。目前,我遍历如下对象:

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

但是,我如何从这个对象中打印5个随机键值对呢?问题是我不知道这个物体的长度,所以我不能通过计算一个随机的起始位置来完成;从那里开始抽取5对。

查找对象中的项数并不困难。您只需要使用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)]]);
}

如果对象不是太大,可以将数据复制到一个常规数组中并对其进行混洗:

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);

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(对象)

var arrayOfKeys = [];
$.each(object, function(key, value){
    arrayOfKeys.push(key);
}