从 Javascript 对象中选取随机属性

2022-08-30 05:40:51

假设你有一个Javascript对象,比如{'cat':'meow','dog':'woof' ...}有没有一种比我想出的这种冗长的方式更简洁地从对象中挑选一个随机属性:

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

答案 1

选择的答案将运作良好。但是,此答案将运行得更快:

var randomProperty = function (obj) {
    var keys = Object.keys(obj);
    return obj[keys[ keys.length * Math.random() << 0]];
};

答案 2

从流中选取随机元素

function pickRandomProperty(obj) {
    var result;
    var count = 0;
    for (var prop in obj)
        if (Math.random() < 1/++count)
           result = prop;
    return result;
}