【发布时间】:2013-02-14 01:50:00
【问题描述】:
假设我有以下几点:
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)
【问题讨论】:
-
迭代不是“效率低下”,你不能对每个元素做任何“没有迭代”的事情。您可以使用各种看起来像函数的方法,但最终,在某种程度上必须对项目进行迭代。
-
//100% 运行代码 const listOfTags = [{ id: 1, label: "Hello", color: "red", sort: 0 }, { id: 2, label: "World" , 颜色:“绿色”,排序:1 },{ id:3,标签:“Hello”,颜色:“蓝色”,排序:4 },{ id:4,标签:“阳光”,颜色:“黄色” , 排序: 5 }, { id: 5, label: "Hello", color: "red", 排序: 6 }], keys = ['label', 'color'], filters = listOfTags.filter( (s = > o => (k => !s.has(k) && s.add(k)) (keys.map(k => o[k]).join('|')) ) (new Set) ; console.log(过滤);
-
赏金很棒,但是这里已经回答了给定数据和答案的问题:stackoverflow.com/questions/53542882/…。赏金的目的是什么?我应该用两个或更多键来回答这个特殊问题吗?
-
Setobject 和maps 是浪费的。这项工作只需要一个简单的.reduce()阶段。
标签: javascript arrays unique