在nodejs中过滤JSON数据

filter JSON data in nodejs

本文关键字:JSON 数据 过滤 nodejs      更新时间:2023-09-26

我在MEAN框架上工作。我的JSON如下所示:

[{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 241
}, {
  "restaurant": {
    "_id": "54e6afe5c1184450416e3118",
    "name": "Farmaaish"
  },
  "sumSP": 3920
},{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 2333
},{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 2445
}]

我想根据餐厅过滤sumSP。这样,对于上面的例子,我需要以下过滤数组:

    [{
      'Skygarage':[241,2333,2445]
     },
    {
      'Farmaaish':[3920]
    }]

我已经看到了使用_的解决方案。lodash的位置,但这应该需要过滤属性的值,但在我的情况下,我不知道有多少餐厅将有在我的JSON

有一种方法可以使用lodash:

var data = [{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 241
}, {
  "restaurant": {
    "_id": "54e6afe5c1184450416e3118",
    "name": "Farmaaish"
  },
  "sumSP": 3920
},{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 2333
},{
  "restaurant": {
    "_id": "55095363649e380e12cc1868",
    "name": "Skygarage"
  },
  "sumSP": 2445
}];
var reduced = _.reduce(data, function (result, value, key) {
    console.log(result, value, key);
    if (!result[value.restaurant.name]) result[value.restaurant.name] = [];
    result[value.restaurant.name].push(value.sumSP);
    return result;
}, {});
document.getElementById("result").innerHTML = JSON.stringify(reduced);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>
<pre id="result"></pre>