从数组中过滤多个对象

nip*_*nip 3 javascript arrays json object

我正在尝试过滤一个对象数组,其中过滤器是另一个数组(整数),它是第一个数组的属性值.我已经设法让它工作但我不确定它是否是最好的方式.由于我是javascript的初学者,我很感激任何建议/改进.

所述items.json文件包含与对象的数组的对象.我想过滤所有iditemsids数组上等于"ids" 的对象(在该数组中).

码:

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);
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

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"
        }
   ]
}
Run Code Online (Sandbox Code Playgroud)

输出:(预期)

[
    {
        "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"
    }
]
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nen*_*car 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)
Run Code Online (Sandbox Code Playgroud)

使用ES6/ES7,你可以这样使用includes().

var result = data.items.filter((e) => itemsids.includes(e.id));
Run Code Online (Sandbox Code Playgroud)