Javascript 比较NodeJs中的两个json&;快车

Javascript 比较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.",

我试图比较NodeJs中的两个json文件。 如果有与place id匹配的review,我需要将review数据推送到places JSON中。如果没有匹配的评论,它将推送一个空数组

代码如下:

//放置JSON

[{
        "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);
});
控制台日志(位置)