一尘不染

如何从JavaScript中的对象数组中获取不同的值?

javascript

假设我有以下内容:

var array = 
    [
        {"name":"Joe", "age":17}, 
        {"name":"Bob", "age":17}, 
        {"name":"Carl", "age": 35}
    ]

能够获得所有不同年龄的数组的最佳方法是什么,这样我得到以下结果数组:

[17, 35]

有什么办法可以替代地构造数据或更好的方法,这样我就不必遍历每个数组来检查“ age”的值并针对另一个数组检查其是否存在,如果没有,可以添加它?

如果有某种方法,我可以不重复就退出不同的年龄…

我想改善当前无效的方法…如果这意味着不是“数组”是对象数组,而是带有一些唯一键(即“ 1,2,3”)的对象“映射”也可以 我只是在寻找最高效的方式。

以下是我目前的操作方式,但是对我来说,即使迭代确实有效,迭代似乎也很糟糕。

var distinct = []
for (var i = 0; i < array.length; i++)
   if (array[i].age not in distinct)
      distinct.push(array[i].age)

阅读 411

收藏
2020-04-25

共2个答案

一尘不染

如果这是PHP,我会用键构建一个数组并array_keys在末尾使用,但是JS却没有这样的奢侈。相反,请尝试以下操作:

var flags = [], output = [], l = array.length, i;
for( i=0; i<l; i++) {
    if( flags[array[i].age]) continue;
    flags[array[i].age] = true;
    output.push(array[i].age);
}
2020-04-25
一尘不染

如果您使用的是ES6 / ES2015或更高版本,则可以通过以下方式进行操作:

const data = [
  { group: 'A', name: 'SD' }, 
  { group: 'B', name: 'FI' }, 
  { group: 'A', name: 'MM' },
  { group: 'B', name: 'CO'}
];
const unique = [...new Set(data.map(item => item.group))]; // [ 'A', 'B']
2020-08-10