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

在Javascript中通过无序的ID数组过滤对象数组,javascript,arrays,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",

这是一组书籍对象

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数组过滤为只包含
selectedds
(保持与
selectedds
中相同的顺序)

我希望得到的最终结果:

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]):


往另一个方向走

 selectedIds.map(id => books.find(b => b.id === id))

往另一个方向走

 selectedIds.map(id => books.find(b => b.id === id))
const book=[{
id:1,
标题:“NPR”,
url:“https://www.npr.org"
},
{
id:2,
标题:“谷歌文档”,
url:“https://docs.google.com/"
},
{
标题:“获取API文档”,
url:“https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
身份证号码:3
},
{
标题:“雅虎”,
url:“http://www.yahoo.com",
身份证号码:4
},
{
标题:“谷歌”,
url:“http://www.google.com",
身份证号码:5
}
];
const selectedds=[1,5,3];
const-mapped=selectedIds.map(id=>{
返回books.find(book=>book.id==id);
});
console.log(映射)
const book=[{
id:1,
标题:“NPR”,
url:“https://www.npr.org"
},
{
id:2,
标题:“谷歌文档”,
url:“https://docs.google.com/"
},
{
标题:“获取API文档”,
url:“https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
身份证号码:3
},
{
标题:“雅虎”,
url:“http://www.yahoo.com",
身份证号码:4
},
{
标题:“谷歌”,
url:“http://www.google.com",
身份证号码:5
}
];
const selectedds=[1,5,3];
const-mapped=selectedIds.map(id=>{
返回books.find(book=>book.id==id);
});

console.log(映射)您确定得到的结果不正确。我在Chromium 77.0.3865.90和Firefox Quantum 69.0.1(64位)上测试了您的代码,它们似乎给出了正确的顺序。我只能假设您的const selectedds的顺序可以更改为1、3、5,以确保保留顺序。NVM,我读得太快了,你想保持所选数据的顺序。:)你确定你得到了错误的结果。我在Chromium 77.0.3865.90和Firefox Quantum 69.0.1(64位)上测试了您的代码,它们似乎给出了正确的顺序。我只能假设您的const selectedds的顺序可以更改为1、3、5,以确保保留顺序。NVM,我读得太快了,你想保持所选数据的顺序。:)