假设您有一个像{'cat':'meow','dog':'woof'...}之类的Javascript对象,比我想出的这种漫长的方法,有没有更简洁的方法可以从对象中选择随机属性:function pickRandomProperty(obj) { var prop, len = 0, randomPos, pos = 0; for (prop in obj) { if (obj.hasOwnProperty(prop)) { len += 1; } } randomPos = Math.floor(Math.random() * len); for (prop in obj) { if (obj.hasOwnProperty(prop)) { if (pos === randomPos) { return prop; } pos += 1; } } }
3 回答

qq_笑_17
TA贡献1818条经验 获得超7个赞
选择的答案会很好。但是,此答案将运行得更快:
var randomProperty = function (obj) {
var keys = Object.keys(obj)
return obj[keys[ keys.length * Math.random() << 0]];
};

富国沪深
TA贡献1790条经验 获得超9个赞
从流中选择随机元素
function pickRandomProperty(obj) {
var result;
var count = 0;
for (var prop in obj)
if (Math.random() < 1/++count)
result = prop;
return result;
}

收到一只叮咚
TA贡献1821条经验 获得超4个赞
您可以在遍历对象时构建一系列键。
var keys = [];
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
keys.push(prop);
}
}
然后,从键中随机选择一个元素:
return keys[keys.length * Math.random() << 0];
添加回答
举报
0/150
提交
取消