0

JavaScript オブジェクトから 5 つのランダムなキーと値のペアを選択して出力する必要があります。現在、次のようにオブジェクトを反復処理します。

        $.each(object, function(key, val) {
                 ...
        });

しかし、このオブジェクトから 5 つのランダムなキーと値のペアを出力するにはどうすればよいでしょうか? 問題は、このオブジェクトの長さがわからないため、ランダムな開始位置を計算して、そこから 5 つのペアを取得することはできませんでした。

4

3 に答える 3

3

オブジェクト内のアイテムの数を見つけることは難しくありません。を使用するだけです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)]]);
}
于 2013-02-21T10:08:39.797 に答える
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);
于 2013-02-21T10:10:04.447 に答える
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(object) を次のようにシミュレートできます。

var arrayOfKeys = [];
$.each(object, function(key, value){
    arrayOfKeys.push(key);
}
于 2013-02-21T10:08:46.547 に答える