JavaScript:从对象数组中获取唯一值及其计数?

标签 javascript jquery

我如何使用 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/

相关文章:

javascript - 如何转义要在语句中使用的 JavaScript 函数参数变量?

javascript - 我如何编码/解码这个专有校验和(Athena 16C PID Controller )?

javascript - 如何使用 Angular.js/JavaScript 为我的 HTML 页面支持多语言?

javascript - 光滑的 slider : Scroll to last slide if slider is in viewport

javascript - JQuery 表单验证什么都不做

javascript - 如何将 css 加载到我的 react 元素中

javascript - 即使在添加 -webkit 后,CSS 动画也无法在 Safari Web 浏览器中运行

javascript - 使用 jquery 自动填充时间输入而不是其他按钮

javascript - 如何在单击 html 表格单元格时获取其中的数据?

javascript - CoffeeScript 类字段未定义