[英]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.id
将review
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.