在Javascript中随机选择对象的可枚举属性

时间:2012-01-24 22:55:53

标签: javascript

在Javascript中给出类似字典的对象,例如{a:1, b:-2, c:42},是否有一种随机选择属性的简单方法?

在上面的示例中,我希望有一个函数可以随机返回abc

我提出的解决方案如下:

    var proplist = []
    forEach(property in foo) {
        if(propertyIsEnumerable(foo[property]) {
            proplist.push(property);
        }
    }
    var n = proplist.length;
    // randomly choose property (randInt(n) returns a random integer in [0,n))
    proplist[randInt(n)];

是否有更惯用的方式来做到这一点?

2 个答案:

答案 0 :(得分:7)

使用Object.keys(甚至Object.getOwnPropertyNames)获取所有属性的列表。然后,通过将Math.random()与列表的长度相乘,选择一个随机属性。

var propList = {}; //...
var tmpList = Object.keys(propList);
var randomPropertyName = tmpList[ Math.floor(Math.random()*tmpList.length) ];
var propertyValue = propList[randomPropertyName];

答案 1 :(得分:5)

这可能与underscore.js非常不相符:

 randomProp = _.shuffle(_.keys(obj))[0]

编辑:实际上,应该使用_.sample