[英]unique json data object in node js
i have a json data like this, 我有一个像这样的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 } ]
where _id: 5abb46b060808f3a2096f91d
is repeated twice, but i want this data object to be contain unique _id
, please help me to solve 其中
_id: 5abb46b060808f3a2096f91d
重复了两次,但我希望此数据对象包含unique _id
,请帮助我解决
update: 更新:
This is my API
to get this data from db, im just getting data from same collection twice, and now i want to make that final json as unique(_id) 这是我从db获取数据的
API
,我只是两次从同一个集合中获取数据,现在我要使最终的json为unique(_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)
})
})
})
}
You can use a Map object for this purpose: 您可以为此使用Map对象:
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);
};
Or enumerate: 或列举:
patientMap.forEach((row) => {
console.log(row);
});
And to turn it back into an Array: 并将其转换回数组:
let newArray = [...patientMap.values()]
console.log(newArray);
You can use array#reduce
with Object.values()
to group your data based on _id
. 您可以将
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 code 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);
If you use a library like underscore.js it becomes a one-line solution, see snippet below. 如果您使用诸如underscore.js之类的库,它将成为单行解决方案,请参见下面的代码段。 You basically tell underscore to return a new array containing only the unique items, with unique criteria being the _id.
您基本上告诉下划线返回一个仅包含唯一项的新数组,唯一条件是_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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.