Javascript 比较NodeJs中的两个json&;快车
我试图比较NodeJs中的两个json文件。 如果有与place id匹配的review,我需要将review数据推送到places JSON中。如果没有匹配的评论,它将推送一个空数组 代码如下: //放置JSONJavascript 比较NodeJs中的两个json&;快车,javascript,node.js,json,express,Javascript,Node.js,Json,Express,我试图比较NodeJs中的两个json文件。 如果有与place id匹配的review,我需要将review数据推送到places JSON中。如果没有匹配的评论,它将推送一个空数组 代码如下: //放置JSON [{ "id": 1, "title": "Hotel in Sidney", "maxNumberOfGuests": 5, "description": "Quiet place by the water.",
[{
"id": 1,
"title": "Hotel in Sidney",
"maxNumberOfGuests": 5,
"description": "Quiet place by the water.",
"createdAt": "2019/12/7 14:34",
"price": 120
},
{
"id": 2,
"title": "Cabin in Italy",
"maxNumberOfGuests": 2,
"description": "Romantic lake cabin for two.",
"createdAt": "2019/4/7 10:00",
"price": 250
}
]
//评论JSON
[{
"id": 1,
"numberOfStars": 3,
"content": "Comfy place",
"placeId": 1,
"createdAt": 12345
},
{
"id": 2,
"numberOfStars": 4,
"content": "Awesome lake view.",
"placeId": "",
"createdAt": 23456
}
]
以下是期望的结果:
[{
"id": 1,
"title": "Hotel in Sidney",
"maxNumberOfGuests": 5,
"description": "Quiet place by the water.",
"createdAt": "2019/12/7 14:34",
"reviews": [{
"id": 1,
"numberOfStars": 3,
"content": "Comfy place",
"placeId": 1,
"createdAt": 12345
}],
"price": 120
},
{
"id": 2,
"title": "Cabin in Italy",
"maxNumberOfGuests": 2,
"description": "Romantic lake cabin for two.",
"createdAt": "2019/4/7 10:00",
"reviews": [],
"price": 250
}
]
这就是我能走多远:
places.forEach(p => {
const { id } = p;
console.log(id);
return id;
});
reviews.forEach(r => {
const { id, numberOfStars, content, placeId, createdAt } = r;
// console.log(id, numberOfStars, content, placeId, createdAt);
console.log(r);
return r;
});
//node express routes to places where will display the desired result.
router.get('/places', function(req, res) {
res.json(places);
});
我就是做不到,需要一些帮助
提前谢谢 我首先将reviews数组缩减为一个由placeId设置键的对象
const reviews = [{
"id": 1,
"numberOfStars": 3,
"content": "Comfy place",
"placeId": 1,
"createdAt": 12345
},
{
"id": 2,
"numberOfStars": 4,
"content": "Awesome lake view.",
"placeId": "",
"createdAt": 23456
}
];
const reviewsHashmap = reviews.reduce((acc, review) => {
if (!review.placeId) return acc;
acc[review.placeId] = acc[review.placeId] || [];
acc[review.placeId].push(review);
return acc;
}, {})
这使得添加reviews属性时性能更高,因为现在不需要为每个位置反复筛选reviews数组
const places = [
{
"id": 1,
"title": "Hotel in Sidney",
"maxNumberOfGuests": 5,
"description": "Quiet place by the water.",
"createdAt": "2019/12/7 14:34",
"price": 120
},
{
"id": 2,
"title": "Cabin in Italy",
"maxNumberOfGuests": 2,
"description": "Romantic lake cabin for two.",
"createdAt": "2019/4/7 10:00",
"price": 250
}
];
const placesWithReviews = places.map(place => ({
...place,
reviews: reviewsHashmap[place.id] || []
}))
现在您应该拥有原始的places数组,但每个places都有一个附加的reviews属性。试试这个
let places=[{
“id”:1,
“标题”:“悉尼酒店”,
“maxNumberOfGuests”:5,
“描述”:“水边安静的地方”,
“createdAt”:“2019/12/714:34”,
“价格”:120
},
{
“id”:2,
“标题”:“意大利小屋”,
“maxNumberOfGuests”:2,
“描述”:“两个人的浪漫湖小屋”,
“createdAt”:“2019/4/7 10:00”,
“价格”:250
}
];
让评论=[{
“id”:1,
“数星”:3,
“内容”:“舒适的地方”,
“placeId”:1,
“createdAt”:12345
},
{
“id”:2,
“数星”:4,
“内容”:“很棒的湖景”,
“placeId”:“,
“createdAt”:23456
}
];
地点。forEach(功能(地点){
place.reviews=reviews.filter(review=>review.placeId==place.id);
});
控制台日志(位置)代码>