代码之家  ›  专栏  ›  技术社区  ›  user8576367

节点js中唯一的json数据对象

  •  1
  • user8576367  · 技术社区  · 7 年前

    我有这样的json数据,

    var data = [ { _id: 5abb46b060808f3a2096f91d,
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: 5ab243ac73959deb3ad79fec,
        description: 'suffering from pain',
        hospital_id: 5aa92df9ec6b3cc78ff88afe,
        doctor_id: 5af142f879f06c22f5359be3 },
      { _id: 5af143a779f06c22f5359be4,
        patient_name: 'Rajesh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: 5aaa628e9ae2a2a642b7495c,
        hospital_id: 5aa92df9ec6b3cc78ff88afe,
        doctor_id: 5af142f879f06c22f5359be3 },
      { _id: 5af144685f2f292b2cc3af6d,
        patient_name: 'krishh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: 5aaa628e9ae2a2a642b7495c,
        hospital_id: 5aa92df9ec6b3cc78ff88afe,
        doctor_id: 5af142f879f06c22f5359be3 },
      { _id: 5abb46b060808f3a2096f91d,
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: 5ab243ac73959deb3ad79fec,
        description: 'suffering from pain',
        hospital_id: 5aa92df9ec6b3cc78ff88afe,
        doctor_id: 5af142f879f06c22f5359be3 } ]
    

    哪里 _id: 5abb46b060808f3a2096f91d 重复两次,但我希望包含此数据对象 unique _id ,请帮我解决

    更新时间:

    这是我的 API 为了从db中获取这些数据,我只需要从同一个集合中获取两次数据,现在我想将最终的json设置为唯一的(\u id)

    function billing_read_all(req, res) {
        var auth_data = res.locals.result;
        var searchParam = { token: auth_data[0].token }
        model.find("doctor", searchParam, function (doctor_data) {
            var searchParam1 = { doctor_id: doctor_data[0]._id }
            model.find("patient", searchParam1, function (patient_data) {
                var searchParam2={charge_id:ObjectId("5ab243ac73959deb3ad79fec")}
                model.find("patient", searchParam2, function (patient_data2) {
                    var data = patient_data.concat(patient_data2)
                    console.log(_.uniq(data))
                    res.send(_.uniq(data))
                // res.send(patient_data)
                })
            })
        })
    }
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Terry Lennox    7 年前

    可以将贴图对象用于此目的:

    var data = [ { _id: '5abb46b060808f3a2096f91d',
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: '5ab243ac73959deb3ad79fec',
        description: 'suffering from pain',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5af143a779f06c22f5359be4',
        patient_name: 'Rajesh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: '5aaa628e9ae2a2a642b7495c',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5af144685f2f292b2cc3af6d',
        patient_name: 'krishh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: '5aaa628e9ae2a2a642b7495c',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5abb46b060808f3a2096f91d',
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: '5ab243ac73959deb3ad79fec',
        description: 'suffering from pain',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' } ];
    
    
    var patientMap = new Map();
    
    data.forEach(row => {
        if (!patientMap.has(row._id.toString())) patientMap.set(row._id.toString(), row);
    });
    
    // One entry per unique ID now
    for (var value of patientMap.values()) {
      console.log(value);
    };
    

    或列举:

    patientMap.forEach((row) => {
        console.log(row);
    });
    

    并将其转换回阵列:

    let newArray = [...patientMap.values()]
    console.log(newArray);
    
        2
  •  1
  •   Hassan Imam Ravi kant    7 年前

    您可以使用 array#reduce 具有 Object.values() 将数据分组的依据 _id

    var data = [ { _id: '5abb46b060808f3a2096f91d', patient_name: 'krishnaaaannnn', gender: 'male', charge_id: '5ab243ac73959deb3ad79fec', description: 'suffering from pain', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id:'5af143a779f06c22f5359be4', patient_name: 'Rajesh', gender: 'male', description: 'suffering from fever', charge_id: '5aaa628e9ae2a2a642b7495c', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id: '5af144685f2f292b2cc3af6d',patient_name: 'krishh', gender: 'male', description: 'suffering from fever', charge_id: '5aaa628e9ae2a2a642b7495c', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id: '5abb46b060808f3a2096f91d', patient_name: 'krishnaaaannnn',gender: 'male', charge_id: '5ab243ac73959deb3ad79fec', description: 'suffering from pain', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' } ],
        result = Object.values(data.reduce((r,o) => {
          r[o._id] = r[o._id] || {...o};
          return r;
        },{}));
    console.log(result);

    ES5代码

    'use strict';
    
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var data = [{ _id: '5abb46b060808f3a2096f91d', patient_name: 'krishnaaaannnn', gender: 'male', charge_id: '5ab243ac73959deb3ad79fec', description: 'suffering from pain', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id: '5af143a779f06c22f5359be4', patient_name: 'Rajesh', gender: 'male', description: 'suffering from fever', charge_id: '5aaa628e9ae2a2a642b7495c', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id: '5af144685f2f292b2cc3af6d', patient_name: 'krishh', gender: 'male', description: 'suffering from fever', charge_id: '5aaa628e9ae2a2a642b7495c', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }, { _id: '5abb46b060808f3a2096f91d', patient_name: 'krishnaaaannnn', gender: 'male', charge_id: '5ab243ac73959deb3ad79fec', description: 'suffering from pain', hospital_id: '5aa92df9ec6b3cc78ff88afe', doctor_id: '5af142f879f06c22f5359be3' }],
        result = Object.values(data.reduce(function (r, o) {
      r[o._id] = r[o._id] || _extends({}, o);
      return r;
    }, {}));
    console.log(result);
        3
  •  0
  •   M. F.    7 年前

    如果使用下划线之类的库。js它变成了一个单行解决方案,请参见下面的代码片段。基本上是告诉下划线返回一个只包含唯一项的新数组,唯一条件是\u id。

    var data = [ { _id: '5abb46b060808f3a2096f91d',
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: '5ab243ac73959deb3ad79fec',
        description: 'suffering from pain',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5af143a779f06c22f5359be4',
        patient_name: 'Rajesh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: '5aaa628e9ae2a2a642b7495c',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5af144685f2f292b2cc3af6d',
        patient_name: 'krishh',
        gender: 'male',
        description: 'suffering from fever',
        charge_id: '5aaa628e9ae2a2a642b7495c',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' },
      { _id: '5abb46b060808f3a2096f91d',
        patient_name: 'krishnaaaannnn',
        gender: 'male',
        charge_id: '5ab243ac73959deb3ad79fec',
        description: 'suffering from pain',
        hospital_id: '5aa92df9ec6b3cc78ff88afe',
        doctor_id: '5af142f879f06c22f5359be3' } ];
    
    var filteredData = _.uniq(data, (item) => item._id);
    console.log(filteredData);
    <script src="http://underscorejs.org/underscore-min.js"></script>