从数组中过滤多个对象

3
我正在尝试过滤一个对象数组,其中的过滤器是另一个整数数组,这些整数数组是第一个数组属性值。我已经成功地实现了它,但我不确定这是否是最好的方法。由于我是 JavaScript 的初学者,我希望能得到任何建议和改进意见。 items.json 文件包含一个对象,其中有一个对象数组。我想要过滤所有对象(在该数组中),这些对象具有与 itemsids 数组上的 "ids" 相等的 id代码:
const itemsall = require('./items.json');

let itemsids = [1, 403, 3];

let filtereditems = [];

itemsids.forEach(id => {
  itemsall.items.forEach(item => {
    if (id === item.id) {
      filtereditems.push(item);
    }
  });
});

items.json(其中的一小部分)

{
    "items": [
        {
            "id": 0,
            "name": "Egg",
            "img": "http://www.serebii.net/pokemongo/items/egg.png"
        },
        {
            "id": 1,
            "name": "Pokeball",
            "img": "http://www.serebii.net/pokemongo/items/20pokeballs.png"
        },
        {
            "id": 2,
            "name": "Greatball",
            "img": "http://www.serebii.net/pokemongo/items/greatball.png"
        }
   ]
}

输出:(预期)

[
    {
        "id": 0,
        "name": "Egg",
        "img": "http://www.serebii.net/pokemongo/items/egg.png"
    },
    {
        "id": 403,
        "name": "Cool Incense",
        "img": "http://www.serebii.net/pokemongo/items/incense.png"
    },
    {
        "id": 3,
        "name": "Ultraball",
        "img": "http://www.serebii.net/pokemongo/items/ultraball.png"
    }
]

谢谢!

1个回答

9
你可以使用filter()indexOf()来返回筛选后的数组。

var data = {
  "items": [{
    "id": 0,
    "name": "Egg",
    "img": "http://www.serebii.net/pokemongo/items/egg.png"
  }, {
    "id": 1,
    "name": "Pokeball",
    "img": "http://www.serebii.net/pokemongo/items/20pokeballs.png"
  }, {
    "id": 2,
    "name": "Greatball",
    "img": "http://www.serebii.net/pokemongo/items/greatball.png"
  }]
}
let itemsids = [1, 403, 3];

var result = data.items.filter(function(e) {
  return itemsids.indexOf(e.id) != -1
})

console.log(result)

使用ES6/ES7,您可以像这样使用includes()

var result = data.items.filter((e) => itemsids.includes(e.id));

谢谢!我使用了第二种方法(ES6/7),因为它在服务器端运行。更加简单和清晰。 - nip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接