我需要选择&从javascript对象中打印5个随机键/值对。目前我迭代遍历这个对象:
$.each(object, function(key, val) {
...
});
但是如何从这个对象中打印5个随机键值对?问题是我不知道这个物体的长度所以我不能通过计算随机起始位置来做到这一点。从那里开始取5对。
答案 0 :(得分:2)
查找对象中的项目数并不难。您只需使用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)]]);
}
答案 1 :(得分: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(对象)var arrayOfKeys = [];
$.each(object, function(key, value){
arrayOfKeys.push(key);
}
答案 2 :(得分: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);