我有一个包含以下元素的数组:
var jobName = getNextJobName();
var Details = getNextJobDetails();
var item = {
Name: jobName,
Details: Details
};
array.push(item);
我希望提取所有唯一的名称(从“名称”字段中)。 (以创建一个将特定工作的所有详细信息分组的新对象)。
请问您能否展示一种有效的方法?
我有一个包含以下元素的数组:
var jobName = getNextJobName();
var Details = getNextJobDetails();
var item = {
Name: jobName,
Details: Details
};
array.push(item);
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);
}
uniq
对象中是否有键 "Name"
的值大于1。但要注意:如果你的名称包含对于 JSON 键无效的字符,则此解决方案将无法工作。 - clentfort你可以使用一个对象来高效地进行匹配,然后从对象中读取名称到数组中:
var unique = {};
for (var i = 0; i < jobs.length; i++) {
unique[jobs[i].Name] = 1;
}
var uniqueArray = [];
for (n in unique) uniqueArray.push(n);
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, "");
}