3

我有一个包含以下项目的数组:

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

我想提取所有唯一名称(从名称字段中)。(为了创建一个新对象,它将特定作业的所有详细信息分组)。

你能告诉我一个有效的方法吗?

4

3 回答 3

5

你的意思是有一个这些对象的列表,并且你想提取所有的唯一值?

这是一种非常有效的方法,将值存储为一个名为的新对象的键,并将值存储为uniq“详细信息”元素的数组。

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 回答