【问题标题】:How to filter out array of objects based on gender using filter in javascript?如何使用javascript中的过滤器根据性别过滤掉对象数组?
【发布时间】:2021-04-10 20:48:18
【问题描述】:

下面是我试图过滤掉男性和女性数组的代码。但它似乎在男性和女性变量中再次返回整个数组。

  const male = await familyTree.filter(async(uncle) => {uncle.gender === 'Male'}); 

  const female = await familyTree.filter(async(aunt) => {aunt.gender === 'Female'});

我的对象数组:

var familyTree=  [
  {
    name: 'Ish',
    gender: 'Male',
    grandfather: 'null',
    grandmother: 'null',
    father: 'Shan',
    mother: 'Anga',
    wife: {}
  },
  {
    name: 'Vich',
    gender: 'Male',
    grandfather: 'null',
    grandmother: 'null',
    father: 'Shan',
    mother: 'Anga',
    wife: {
      name: 'Lika',
      husband: 'Vich',
      fil: 'Shan',
      mil: 'Anga',
      children: [Array]
    }
  },
  {
    name: 'Aras',
    gender: 'Male',
    grandfather: 'null',
    grandmother: 'null',
    father: 'Shan',
    mother: 'Anga',
    wife: {
      name: 'Chitra',
      husband: 'Aras',
      fil: 'Shan',
      mil: 'Anga',
      children: [Array]
    }
  },
  {
    name: 'Satya',
    gender: 'Female',
    grandfather: 'null',
    grandmother: 'null',
    father: 'Shan',
    mother: 'Anga',
    husband: 'Vyan',
    children: [ [Object], [Object], [Object] ]
  }
]

当我在控制台中打印男性和女性时,它会再次返回整个数组而不过滤它们。可能是什么原因?

【问题讨论】:

  • 您在两种过滤方法中都缺少return
  • 另外:filter 不返回承诺,即使您将async 函数作为回调传递给它,所以等待filter 的结果没有多大用处。您的代码中不需要asyncawait,因为没有异步依赖的迹象。

标签: javascript filter family-tree


【解决方案1】:

如果你在箭头函数中使用{},你需要return它的结果。

我还删除了async-awaits,如有必要,请重新引入。

const male = familyTree.filter((uncle) => {
    return uncle.gender === 'Male'
});

const female = familyTree.filter((aunt) => {
    return aunt.gender === 'Female'
});

【讨论】:

    【解决方案2】:

    在JavaScript中通过数组进行过滤,可以使用简化的方式

    var males = familyTree.filter(prop => {
        return prop.gender === 'Male'
    }) 
    
    var females = familyTree.filter(prop => {
        return prop.gender === 'Female'
    }) 
    

    【讨论】:

      【解决方案3】:

      使用花括号将函数体{}括起来时,需要使用return关键字返回值,

      const male = familyTree.filter(uncle => {return uncle.gender === 'Male'});
      

      或者如果你去掉花括号:

      const male = familyTree.filter(uncle => uncle.gender === 'Male')
      

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 2021-04-09
        • 1970-01-01
        • 2017-03-19
        • 2020-12-03
        • 2020-02-24
        • 2021-04-15
        相关资源
        最近更新 更多