繁体   English   中英

如何将对象数组中的 object 推送到另一个 object 数组中的数组?

[英]How can I push an object in an array of objects to an array within another array of object?

我有一个可变parks ,其中包括:

let parks = [
  { id: 1, park_name: 'Average Park', review: [] },
  { id: 2, park_name: 'Better Park', review: [] },
  { id: 3, park_name: 'Cooler Park', review: [] },
  { id: 4, park_name: 'Dull Park', review: [] }
]

另一个变量review如下:

let review = [
  { id: 1, park_id: 1, comment: "It's an okay park. Seen better" },
  { id: 2, park_id: 1, comment: "Ehh, it's alright" },
  { id: 3, park_id: 2, comment: "It's pretty decent" },
  { id: 4, park_id: 3, comment: "Good not great" }
]

我想要实现的是基于park_id == parks.idreview object 添加到parks.review 基本上我想要的是这样的:

[
  { id: 1, park_name: 'Average Park', review: [{ id: 1, park_id: 1, comment: "It's an okay park. Seen better" },  { id: 2, park_id: 1, comment: "Ehh, it's alright" }] },
  { id: 2, park_name: 'Better Park', review: [{ id: 3, park_id: 2, comment: "It's pretty decent" }] },
  { id: 3, park_name: 'Cooler Park', review: [{ id: 4, park_id: 3, comment: "Good not great" }] },
  { id: 4, park_name: 'Dull Park', review: [] }
]

最好的方法是什么?

嵌套for of将是同时扫描 2 个 arrays 等的最简单直接的方法。

您也可以在单个循环中执行此操作,并使用_.find或 filter 使代码看起来更优雅

 let parks = [ { id: 1, park_name: 'Average Park', review: [] }, { id: 2, park_name: 'Better Park', review: [] }, { id: 3, park_name: 'Cooler Park', review: [] }, { id: 4, park_name: 'Dull Park', review: [] } ]; let reviews = [ { id: 1, park_id: 1, comment: "It's an okay park. Seen better" }, { id: 2, park_id: 1, comment: "Ehh, it's alright" }, { id: 3, park_id: 2, comment: "It's pretty decent" }, { id: 4, park_id: 3, comment: "Good not great" } ]; for(let park of parks) { for(let review of reviews) { if(park.id === review.park_id) { park.review.push(review); } } } console.log(parks);

在我的脑海中,我会做这样的事情:

let parks = [
  { id: 1, park_name: "Average Park", review: [] },
  { id: 2, park_name: "Better Park", review: [] },
  { id: 3, park_name: "Cooler Park", review: [] },
  { id: 4, park_name: "Dull Park", review: [] },
];

let reviews = [
  { id: 1, park_id: 1, comment: "It's an okay park. Seen better" },
  { id: 2, park_id: 1, comment: "Ehh, it's alright" },
  { id: 3, park_id: 2, comment: "It's pretty decent" },
  { id: 4, park_id: 3, comment: "Good not great" },
];

const combined = parks.map((park) => ({
  ...park,
  review: reviews.filter((review) => review.park_id === park.id),
}));

您只能对 arrays 进行一次迭代。

parks为参考,通过id获得公园的引用,并将所有评论添加到他们引用的公园。

 const parks = [{ id: 1, park_name: 'Average Park', review: [] }, { id: 2, park_name: 'Better Park', review: [] }, { id: 3, park_name: 'Cooler Park', review: [] }, { id: 4, park_name: 'Dull Park', review: [] }], review = [{ id: 1, park_id: 1, comment: "It's an okay park. Seen better" }, { id: 2, park_id: 1, comment: "Ehh, it's alright" }, { id: 3, park_id: 2, comment: "It's pretty decent" }, { id: 4, park_id: 3, comment: "Good not great" }], parkIds = Object.fromEntries(parks.map(o => [o.id, o])); review.forEach(o => parkIds[o.park_id].review.push(o)); console.log(parks);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM