我如何使用 jQuery 遍历对象,并获取键的唯一值以及每个值的计数?
例如,对于这个数组:
var electrons = [
{ name: 'Electron1', distance: 1 },
{ name: 'Electron2', distance: 1 },
{ name: 'Electron3', distance: 2 },
{ name: 'Electron4', distance: 2 },
{ name: 'Electron5', distance: 2 },
{ name: 'Electron6', distance: 2 },
{ name: 'Electron7', distance: 2 },
{ name: 'Electron8', distance: 2 },
{ name: 'Electron9', distance: 2 },
{ name: 'Electron10', distance: 2 },
{ name: 'Electron11', distance: 3 },
];
我想取回以下内容:
var distance_counts = {1: 2, 2: 8, 3: 1};
我有这个,它可以工作但有点笨拙:
var radius_counts = {};
for (var i = 0; i < electrons.length; i++) {
if (electrons[i].distance in radius_counts) {
radius_counts[electrons[i].distance] += 1;
} else {
radius_counts[electrons[i].distance] = 1;
}
}
最佳答案
你可以使用 map为此目的:
var distances = {};
$.map(electrons,function(e,i) {
distances[e.distance] = (distances[e.distance] || 0) + 1;
});
或
var distances = {};
$.each(electrons,function(i,e) {
distances[this.distance] = (distances[this.distance] || 0) + 1;
});
我还可以向您指出,虽然这段代码看起来不错且紧凑,但通常速度并不快。更好地使您的代码更快、更易于查看:
var distances = {},e;
for (var i = 0,l=electrons.length; i < l; i++) {
e = electrons[i];
distances[e.distance] = (distances[e.distance] || 0) + 1;
}
关于JavaScript:从对象数组中获取唯一值及其计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318783/