首页 > 解决方案 > .filter() 方法返回一个空数组

问题描述

我正在尝试使用 JavaScript 的 filter() 方法返回一个对象数组,其中对象具有特定值。在我的场景中,用户可以有名字、姓氏和附加的多个字符。

我正在尝试使用 filter() 返回任何具有至少 100 个或更多黄金字符的对象,但它返回一个空数组。这是我写的:

var users = [{
    firstname: 'Owen',
    lastname: 'Wilson',
    characters: [{
        race: 'dwarf',
        level: 80,
        gold: 150
      },
      {
        race: 'dark elf',
        level: 75,
        gold: 50
      },
      {
        race: 'human',
        level: 70,
        gold: 75
      }
    ]
  },

  {
    firstname: 'Vince',
    lastname: 'Vaughan',
    characters: [{
        race: 'dwarf',
        level: 80,
        gold: 90
      },
      {
        race: 'dark elf',
        level: 75,
        gold: 50
      },
      {
        race: 'human',
        level: 70,
        gold: 75
      }
    ]
  },

  {
    firstname: 'Ben',
    lastname: 'Stiller',
    characters: [{
        race: 'dwarf',
        level: 80,
        gold: 200
      },
      {
        race: 'dark elf',
        level: 75,
        gold: 50
      },
      {
        race: 'human',
        level: 70,
        gold: 75
      }
    ]
  }

];
var minimumGold = element => element.characters.gold >= 100;
var usersWithLotsOfGold = users.filter(minimumGold);
console.log(usersWithLotsOfGold);
// Expected objects [0] and [2]

标签: javascriptecmascript-6

解决方案


您需要检查characters数组中的每个字符。一种方法是这样使用Array.prototype.some()

const users = [{firstname:'Owen',lastname:'Wilson',characters:[{race:'dwarf',level:80,gold:150},{race:'dark elf',level:75,gold:50},{race:'human',level:70,gold:75}]},{firstname:'Vince',lastname:'Vaughan',characters:[{race:'dwarf',level:80,gold:90},{race:'dark elf',level:75,gold:50},{race:'human',level:70,gold:75}]},{firstname:'Ben',lastname:'Stiller',characters:[{race:'dwarf',level:80,gold:200},{race:'dark elf',level:75,gold:50},{race:'human',level:70,gold:75}]}];
const minimumGold = element => element.characters.some(
  character => character.gold >= 100
);
const usersWithLotsOfGold = users.filter(minimumGold);

console.log(usersWithLotsOfGold);


推荐阅读