【问题标题】:How to add book author by comparing book id from two arrays如何通过比较两个数组中的书籍 ID 来添加书籍作者
【发布时间】:2021-09-17 03:16:34
【问题描述】:
var books = [
  {id: 1, title: "Javascript"},
  {id: 2, title: "PHP"},
  {id: 3, title: "Dart"},
  {id: 4, title: "C++"}
]
var authors = [
  {book_id: 1, user: {id: 1, name: "John Doe"}},
  {book_id: 3, user: {id: 4, name: "Alex Rio"}},
  {book_id: 4, user: {id: 42, name: "Paul Radmond"}}
]

for(var i = 0; i < books.length; i++) {
  let bookAuthor = authors.find(author => {
    return author.book_id === books[i].id
  })

  console.log(bookAuthor.user)
  
  // Push user key from authors to current book item by book id
}

循环结果:

{
  id:1,
  name:"John Doe"
}

error: Uncaught TypeError: Cannot read property 'user' of undefined

在这个循环中,第一次发现用户,但第二次返回错误。

在我的情况下,我如何能够通过 id 正确(高效地)将图书用户推送到 books 数组项?

结果必须是这样的:

var books = [
    {id: 1, title: "Javascript", user: {id: 1, name: "John Doe"}},
    {id: 2, title: "PHP"},
    {id: 3, title: "Dart", user: {id: 4, name: "Alex Rio"}},
    {id: 4, title: "C++", user: {id: 42, name: "Paul Radmond"}}
]

【问题讨论】:

标签: javascript arrays performance loops object


【解决方案1】:

你离得太近了。只需检查是否找到作者。如果找到,则将用户对象添加到书对象。关注这个-

const books = [
  {id: 1, title: "Javascript"},
  {id: 2, title: "PHP"},
  {id: 3, title: "Dart"},
  {id: 4, title: "C++"}
];
const authors = [
  {book_id: 1, user: {id: 1, name: "John Doe"}},
  {book_id: 3, user: {id: 4, name: "Alex Rio"}},
  {book_id: 4, user: {id: 42, name: "Paul Radmond"}}
];

const result = books.map(book => {
  const author = authors.find(author => author.book_id === book.id);
  
  if (author) {
    book.user = author.user;
  }
  
  return book
});

console.log(result);
.as-console-wrapper { min-height: 100% !important; top: 0}

【讨论】:

    【解决方案2】:

    你可以这样做

    const result = books.map(book => {
      const author = authors.find(author => author.book_id === book.id)
      if(author) return {...book, user: author}
      return book;
    })
    

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2011-12-24
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2014-04-04
      • 2019-05-22
      • 2022-01-16
      • 2011-12-10
      相关资源
      最近更新 更多