6

私はJSONオブジェクトを持っています。これは、次のような相互に共通のプロパティを持つ他のJSONオブジェクトの長いリストで構成されています。

var myData = { 
    "0291" : { "Firstname" : "Jeremy", "Surname" : "Dyson" },
    "0398" : { "Firstnname" : "Billy", "Surname" : "Bunter" },
    "6714" : { "Firstnname" : "Harry", "Surname" : "Peterson" },
    "9080" : { "Firstnname" : "Barry", "secondname": "Joe", "Surname" : "Mainwaring"}
    ...
    ...
}

私はすでにhtmlテンプレートを作成しました。JSを使用して、data {}内のオブジェクトをランダムな順序で選択または反復(ランダム選択+ループ)したいので、訪問者ごとにその場でHTMLを入力できます。ランダムな部分は重要であるため、訪問者ごとに異なるデータを取得する可能性があります。

プレーンなJavaScriptまたはjQueryソリューションは、これがデプロイされているコンテキストで機能します。


編集:私が実装したソリューションは以下のとおりです。

1.すべてのキーを収集します。

var keyArray = Object.keys(myData);

2.シャッフル機能

function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};
keyArray = shuffle(keyArray); // shuffle it!

3.ループして繰り返します。

for (var i = 0; i < keyArray.length; ++i) {
    var current = data[keyArray[i]];
    ... // what you want to do each time.
}
4

3 に答える 3

5

dataまず、ここに示すように、オブジェクトを配列に変換します (最初のレベルのキーは失われます): https://stackoverflow.com/a/11474071/664108

var dataArray = $.map(data, function (value, key) { return value; });

次に、配列をシャッフルします (JavaScript 配列をランダム化 (シャッフル) する方法を参照してください) 。

または、キーをシャッフルしてから元のオブジェクトを操作することもできます。このようにして、キーも保持されます。

var keyArray = $.map(data, function (value, key) { return key; });

shuffle(keyArray); // example (shuffle function has to be implemented, see above)

for (var i = 0; i < keyArray.length; ++i) {
    var current = data[keyArray[i]];
    // do stuff with current dataset
}

コメントからの追加

キー配列は、次の方法でも作成できます。

var keyArray = Object.keys(data);

ただし、これは最新のブラウザーでのみ機能することに注意してください。IE 8 までのバージョンで Internet Explorer をサポートする場合は、使用しないでください ( http://msdn.microsoft.com/en-us/library/ie/ff688127を参照)。 (v=vs.94).aspx )

于 2013-02-04T23:25:14.273 に答える
3

すでにJSONをランダムに生成することを考えていますか、それともシャッフルしますか?Javascriptでシャッフル

配列をシャッフルすると、foreachを適用して、ランダムな順序でアイテムを取得できます。:)

注:IDのコピーだけをシャッフルする方が速い場合があります。

免責事項!私はあなたの場合には疑似ランダム性だけが必要だと思いました。

于 2013-02-04T23:14:14.003 に答える
0

Object.keys 関数を使用する

var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

詳細: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

于 2016-12-22T10:55:34.033 に答える