我需要选择&从javascript对象打印5个随机键/值对。目前我遍历这样的对象:从javascript对象打印5个随机键/值对
$.each(object, function(key, val) {
...
});
但我怎么能从这个对象打印5个随机键值对?问题是,我不知道这个对象的长度,所以我不能通过计算随机起始位置&从那里取出5对来做到这一点。
我需要选择&从javascript对象打印5个随机键/值对。目前我遍历这样的对象:从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)]]);
}
我遇到过'Object.keys 。 '但这不是一个跨浏览器的解决方案。 http://kangax.github.com/es5-compat-table/ – 2013-02-21 10:10:21
@ user01 [你可以很容易地添加它](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/对象/密钥#兼容性)。 – lonesomeday 2013-02-21 10:12:30
@lonesomeday我已经修复了文档以匹配你的链接锚点:) – 2013-02-21 10:20:53
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);
}
我遇到过'Object.keys。 '但这不是一个跨浏览器的解决方案。 http://kangax.github.com/es5-compat-table/ – 2013-02-21 10:12:01
@ user01我已经更新了我的答案,以制作一个“服装”object.key()函数。这样你就可以在任何浏览器中获得密钥数组 – 2013-02-21 10:19:18
如果对象不是太大,可以将数据复制到一个规则的阵列和将它洗:
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);
我添加一个jQuery标签。如果这不是你的框架,请重新标记。 – 2013-02-21 10:00:29
谢谢,我忘了提及! – 2013-02-21 10:03:01
在迭代的每一步中,您都可以生成一个与对象长度之间的随机数......然后获取该索引值 – Jacob 2013-02-21 10:03:16