通过Javascript中ID的乱序过滤对象数组

时间:2019-10-07 19:46:18

标签: javascript arrays

这里是书籍对象的数组。

const books=[
    {
      "id": 1,
      "title": "NPR",
      "url": "https://www.npr.org"
    },
    {
      "id": 2,
      "title": "Google Docs",
      "url": "https://docs.google.com/"
    },
    {
      "title": "Fetch API Docs",
      "url": "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
      "id": 3
    },
    {
      "title": "Yahoo",
      "url": "http://www.yahoo.com",
      "id": 4
    },
    {
      "title": "Google",
      "url": "http://www.google.com",
      "id": 5
    }
  ]

以及一个单独的ID数组

const selectedIds = [1, 5, 3]

使用javascript,如何将books数组仅过滤到selectedIds(与selectedIds中的顺序相同)?

我希望得到的最终结果:

selectedBooks = [
    {
      "id": 1,
      "title": "NPR",
      "url": "https://www.npr.org"
    },
    {
      "title": "Google",
      "url": "http://www.google.com",
      "id": 5
    },
    {
      "title": "Fetch API Docs",
      "url": "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
      "id": 3
    }
  ]

我当前的代码是这样的,但这保留了books数组的顺序(即[1、3、5]):

books.filter(function(item) {
   return selectedIds.includes(item.id);
}

2 个答案:

答案 0 :(得分:3)

往另一个方向走。

serve build

答案 1 :(得分:1)

const books = [{
    id: 1,
    title: "NPR",
    url: "https://www.npr.org"
  },
  {
    id: 2,
    title: "Google Docs",
    url: "https://docs.google.com/"
  },
  {
    title: "Fetch API Docs",
    url: "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
    id: 3
  },
  {
    title: "Yahoo",
    url: "http://www.yahoo.com",
    id: 4
  },
  {
    title: "Google",
    url: "http://www.google.com",
    id: 5
  }
];

const selectedIds = [1, 5, 3];

const mapped = selectedIds.map(id => {
  return books.find(book => book.id === id);
});

console.log(mapped);