从数组中过滤多个对象

时间:2016-12-09 19:07:21

标签: javascript arrays json object

我试图过滤一个对象数组,其中过滤器是另一个数组(整数),它是第一个数组的属性值。我设法让它发挥作用,但我不确定它是不是最好的方法。由于我是javascript的初学者,我感谢任何建议/改进。

items.json 文件包含一个包含对象数组的对象。我想过滤所有id等于" ids"的对象(在该数组中)在 itemsids 数组。

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 个答案:

答案 0 :(得分:6)

您可以使用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));
相关问题