我有这样的结构:
var entities = {
1: {'name': 'Fred', 'age': 35},
2: {'name': 'Hans', 'age': 47},
3: {'name': 'Bert', 'age': 27}
}我需要这样的东西:
var ids = entities.filter( p => p.age > 30);它应该返回一个数组:
[1, 2]有方便的方法吗?例如,洛达什等?
发布于 2019-01-30 15:57:21
您可以将Object.keys与Array.prototype.filter结合使用。
var entities = {
1: {'name': 'Fred', 'age': 35},
2: {'name': 'Hans', 'age': 47},
3: {'name': 'Bert', 'age': 27}
}
const result = Object.keys(entities).filter(key => entities[key].age > 30);
console.log(result);
发布于 2019-01-30 15:59:50
filter只在Array上工作,但是有一些有趣的东西:您的对象看起来像一个数组!
使用javascript的人会说:
如果它走路像鸭子,叫起来像鸭子,那么它就是鸭子。
关于这个上下文,类似于数组的东西只是一个以数字作为键加上一个length属性的对象。看着你的对象,你就错过了长度属性!
让我们以这样的方式添加length属性:
entities.length = Math.max(...Object.keys(entities)) + 1; // 4然后,可以在实际数组中转换类似数组的对象:
const array = Array.from(entities);最后,您可以在上面使用所有的Array方法,还可以筛选:
array
.filter(p => p.age > 30)
.map((obj, index) => index);发布于 2019-01-30 16:10:10
您可以使用reduce方法。它同时适用于数组和对象。示例:
var entities = {
1: {'name': 'Fred', 'age': 35},
2: {'name': 'Hans', 'age': 47},
3: {'name': 'Bert', 'age': 27}
}
var result = _.reduce(entities, (acc, o, key) => {
if(o.age >= 35) { // add your condition here
acc.push(key);
}
return acc;
}, []);
console.log(result); // ["1", "2"]https://stackoverflow.com/questions/54444518
复制相似问题