猿问

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

这是一组书籍对象。


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,如何将书籍数组过滤为selectedIds(保持与 in 相同的顺序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);

}


白衣染霜花
浏览 210回答 2
2回答

冉冉说

往另一个方向走。 selectedIds.map(id => books.find(b => b.id === id))

慕妹3242003

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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答