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

新手上路,请多包涵

假设我有以下内容:

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

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

[17, 35]

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

如果有某种方法我可以在不迭代的情况下提取不同的年龄……

我想改进的当前低效方式……如果这意味着不是“数组”是一个对象数组,而是一个具有一些唯一键(即“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)

原文由 Rolando 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 981
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);
 }

原文由 Niet the Dark Absol 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你使用的是 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']

是一个关于如何做的例子。

原文由 Vlad Bezden 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题