3

次の項目を含む配列があります。

var jobName = getNextJobName();
var Details = getNextJobDetails();
var item = {
          Name: jobName,
          Details: Details
        };
array.push(item);

([名前]フィールドから)すべての一意の名前を抽出したいと思います。(特定のジョブのすべての詳細をグループ化する新しいオブジェクトを作成するため)。

これを行うための効率的な方法を教えてください。

4

3 に答える 3

5

それらのオブジェクトのリストがあり、すべての一意の値を抽出したいということですか?

これは非常に効率的な方法で、値を呼び出された新しいオブジェクトのキーとして保存し、値をuniq「Details」要素の配列にします。

var arr = [ { Name: 'Alex', Details: 'Foo' }, { Name: 'Igor', Details: 'None' }, { Name: 'Alex', Details: 'Boo' } ];
var uniq = {}; // contains all the unique names
for(var i=0; i<arr.length; i++) {
  var el = arr[i].Name;
  if(!uniq[el]) uniq[el] = []; // start the array
  uniq[el].push(arr[i].Details);
}

http://jsfiddle.net/lmatteis/8LWMH/4/

于 2012-10-04T09:12:06.180 に答える
2

オブジェクトを使用して効率的にマッチングを行い、オブジェクトから名前を配列に読み込むことができます。

var unique = {};
for (var i = 0; i < jobs.length; i++) {
    unique[jobs[i].Name] = 1;
}
var uniqueArray = [];
for (n in unique) uniqueArray.push(n);

デモ: http: //jsfiddle.net/Guffa/4cH4F/

于 2012-10-04T09:11:33.783 に答える
0

次のコードスニペットでうまくいくはずです。

var _bzAppUnique = 0; //unique variable to increase at each call
function uniqueID() {
    var d = new Date();
    var u = d.getFullYear() + "," + d.getMonth() + "," + 
            d.getHours() + "," + d.getMinutes() + "," + 
            d.getSeconds() + "," + _bzAppUnique;
    _bzAppUnique++;
    return u.replace(/\,/g, "");
}
于 2013-12-08T19:00:49.030 に答える