使用高级函数创建新的对象数组

问题描述

books 数组中的对象示例:

const books = [
  {
    id: "5f447132d487bd81da01e25e",title: "sit eiusmod occaecat eu magna",genre: "Science",authorId: 8,borrows: [
      {
        id: "5f446f2e2cfa3e1d234679b9",returned: false,},{
        id: "5f446f2ed3609b719568a415",returned: true,{
        id: "5f446f2e1c71888e2233621e",{
        id: "5f446f2e6059326d9feb9a68",{
        id: "5f446f2ede05a0b1e3394d8b",{
        id: "5f446f2e4081699cdc6a2735",{
        id: "5f446f2e3900dfec59489477",{
        id: "5f446f2e409f8883af2955dd",{
        id: "5f446f2eae901a82e0259947",{
        id: "5f446f2ef2ab5f5a9f60c4f2",{
        id: "5f446f2ea6b68cf6f85f6e28",{
        id: "5f446f2eed18105706d6ca19",{
        id: "5f446f2e91c2af00cb74e82b",{
        id: "5f446f2e5aa2bb5545a0f8a6",{
        id: "5f446f2ea508b6a99c3e42c6",{
        id: "5f446f2e50cc2da9cd80efdb",{
        id: "5f446f2e0b3e2ff72fc503e7",{
        id: "5f446f2ef795e593cd3cd19d",{
        id: "5f446f2e2f35653fa80bf490",{
        id: "5f446f2e7b9cd304fed3a8bc",{
        id: "5f446f2ed9aac23c0340aab2",],

accounts 数组中的对象示例:

const accounts = [
  {
    id: "5f446f2ecfaf0310387c9603",picture: "https://api.adorable.io/avatars/75/esther.tucker@zillacon.me",age: 25,name: {
      first: "Esther",last: "Tucker",company: "ZILLACON",email: "esther.tucker@zillacon.me",registered: "Thursday,May 28,2015 2:51 PM",

我需要编写函数 getBorrowersForBook() 来执行此操作:它应该从书的 borrows 键返回所有交易的数组。但是,每笔交易都应包含相关的帐户信息和 returned 键,如下所示: (它还应该将数组中的对象数量限制为 10。)

getBorrowersForBook(book,accounts);
  [
    {
      id: "5f446f2e4eff1030e7316861",picture: "https://api.adorable.io/avatars/75/barber.waters@kegular.biz",age: 37,name: {
        first: "Barber",last: "Waters",company: "KEGULAR",email: "barber.waters@kegular.biz",registered: "Tuesday,April 14,2020 9:15 PM",{
      id: "5f446f2ecc5c4787c403f844",picture: "https://api.adorable.io/avatars/75/dyer.trevino@slax.io",age: 34,name: {
        first: "Dyer",last: "Trevino",company: "SLAX",email: "dyer.trevino@slax.io",registered: "Saturday,August 1,2015 8:13 PM",]

这是我目前所拥有的:

    function getBorrowersForBook(book,accounts) {
  const { name,company,email,registered } = accounts;
  const { borrows } = book;
  let resultArray = [];
  let resultObject = borrows.filter((borrow) => {
    if (borrow > 1) {
      resultArray.push({ borrows,name,registered });
    }
  });
  resultArray.sort((resultA,resultB) => (resultA > resultB ? -1 : 1));
  resultArray.splice(0,10);
  return resultArray;
}

解决方法

基于借款人 ID 存在于 accounts 数组中的假设,我建议如下。

我不确定你想按什么排序,但下面的代码假设你按公司升序排序;如果不是这种情况,您可以根据自己的需要进行调整。

function getBorrowersForBook(book,accounts) {
  // `borrows` is a list of transactions,each of type { id: string,returned: true }
  const { borrows } = book;

  const borrowers = borrows.map(({ id,returned })=> {
    // find account that matches the borrower's ID
    const account = accounts.find(account => account.id === id);

    // return the matching account,along with the `returned` info
    return {
      ...account,returned,};
  });

  return borrowers
    .sort((borrowerA,borrowerB) => {
      const companyA = borrowerA.company;
      const companyB = borrowerB.company;
      return companyA.localeCompare(companyB);
    })
    .slice(0,10);
}