在数组内展平对象

Alt*_*irl 7 javascript arrays flatten

我正在尝试将第一个键:值对的值应用于第二个键:值对的数组内的每个值,同时从books数组中删除键,从而生成一个获取此输入的列表:

var fictionCatalog = [
  {
    author: 'Michael Crichton',// push into each book
    books: [
      {name: 'Sphere', price: 10.99},
      {name: 'Jurassic Park', price: 5.99},
      {name: 'The Andromeda Strain', price: 9.99},
      {name: 'Prey', price: 5.99}
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

并记录此输出:

[
 [ Michael Crichton, 'Sphere', 10.99 ], 
 [ Michael Crichton, 'Jurassic Park', 5.99 ],
 [ Michael Crichton, 'The Andromeda Strain', 9.99 ],
 [ Michael Crichton, 'Prey', 5.99 ]
]
Run Code Online (Sandbox Code Playgroud)

哪里我卡住了

var fictionCatalog = [
  {
    author: 'Michael Crichton',
    books: [
      {name: 'Sphere', price: 10.99},
      {name: 'Jurassic Park', price: 5.99},
      {name: 'The Andromeda Strain', price: 9.99},
      {name: 'Prey', price: 5.99}
    ]
  }
]

var collection = fictionCatalog.reduce(function(prev, curr) {
  return prev.concat(curr.author, curr.books);
}, []);

console.log(collection)
Run Code Online (Sandbox Code Playgroud)

the*_*eye 5

您可以映射的结果books是这样

var collection = fictionCatalog.map(function(obj) {
  return obj.books.map(function(book) {
    return [obj.author, book.name, book.price];
  });
});

console.log(collection);
Run Code Online (Sandbox Code Playgroud)

产量

[ [ [ 'Michael Crichton', 'Sphere', 10.99 ],
    [ 'Michael Crichton', 'Jurassic Park', 5.99 ],
    [ 'Michael Crichton', 'The Andromeda Strain', 9.99 ],
    [ 'Michael Crichton', 'Prey', 5.99 ] ] ]
Run Code Online (Sandbox Code Playgroud)

对于每个项目fictionCatalog,我们应用一个函数并将结果收集到一个数组中.现在,该函数实际上将另一个函数应用于其所有书籍并返回一个数组作为结果.第二个功能(适用于所有书籍),返回当前作者,书名和价格.