首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选映射和ids返回数组

筛选映射和ids返回数组
EN

Stack Overflow用户
提问于 2019-01-30 15:53:39
回答 6查看 901关注 0票数 0

我有这样的结构:

代码语言:javascript
复制
var entities = {
  1: {'name': 'Fred', 'age': 35},
  2: {'name': 'Hans', 'age': 47},
  3: {'name': 'Bert', 'age': 27}
}

我需要这样的东西:

代码语言:javascript
复制
var ids = entities.filter( p => p.age > 30);

它应该返回一个数组:

代码语言:javascript
复制
[1, 2]

有方便的方法吗?例如,洛达什等?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-01-30 15:57:21

您可以将Object.keysArray.prototype.filter结合使用。

代码语言:javascript
复制
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);

票数 5
EN

Stack Overflow用户

发布于 2019-01-30 15:59:50

filter只在Array上工作,但是有一些有趣的东西:您的对象看起来像一个数组!

使用javascript的人会说:

如果它走路像鸭子,叫起来像鸭子,那么它就是鸭子。

关于这个上下文,类似于数组的东西只是一个以数字作为键加上一个length属性的对象。看着你的对象,你就错过了长度属性!

让我们以这样的方式添加length属性:

代码语言:javascript
复制
entities.length = Math.max(...Object.keys(entities)) + 1; // 4

然后,可以在实际数组中转换类似数组的对象:

代码语言:javascript
复制
const array = Array.from(entities);

最后,您可以在上面使用所有的Array方法,还可以筛选:

代码语言:javascript
复制
array
  .filter(p => p.age > 30)
  .map((obj, index) => index);
票数 2
EN

Stack Overflow用户

发布于 2019-01-30 16:10:10

您可以使用reduce方法。它同时适用于数组和对象。示例:

代码语言:javascript
复制
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"]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54444518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档