Javascript 如何从原始json中获得仅具有唯一值的新json
我很难从两个键的组合中获得只有唯一(日期、小时)值的json。json是这样的:Javascript 如何从原始json中获得仅具有唯一值的新json,javascript,arrays,json,Javascript,Arrays,Json,我很难从两个键的组合中获得只有唯一(日期、小时)值的json。json是这样的: { "date": "2019-07-11", "hour": "12:00", "idAppointmentsHour": 47914218, "shift": "T" }, for (var i = 0; i < agendaDatas.length; i++) { if (!datas.includes(agendaDatas[i].data)) {
{
"date": "2019-07-11",
"hour": "12:00",
"idAppointmentsHour": 47914218,
"shift": "T"
},
for (var i = 0; i < agendaDatas.length; i++) {
if (!datas.includes(agendaDatas[i].data)) {
if (!datas.includes(agendaDatas[i].turno)) {
datas.push({"date": agendaDatas[i].data});
datas.push({"shift": agendaDatas[i].shift})
}
}
}
因此,如果他们有相同的日期
和相同的班次
,我想对这些信息进行分组。我正在使用ES5,目前我的代码如下:
{
"date": "2019-07-11",
"hour": "12:00",
"idAppointmentsHour": 47914218,
"shift": "T"
},
for (var i = 0; i < agendaDatas.length; i++) {
if (!datas.includes(agendaDatas[i].data)) {
if (!datas.includes(agendaDatas[i].turno)) {
datas.push({"date": agendaDatas[i].data});
datas.push({"shift": agendaDatas[i].shift})
}
}
}
for(变量i=0;i
我试过了
json中的所有值都被复制。我不能使用ES6集合,因为平台在ES5中运行。基本上,您可以使用一组键作为分组标识符,并使用一个对象对相同的组进行分组
function getKey(keys) {
return function (object) {
return keys.map(function (k) { return object[k]; }).join('|');
};
}
var getKeyDateShift = getKey(['date', 'shift']),
groups = Object.create(null),
result = data.reduce(function (r, o) {
var key = getKeyDateShift(o);
if (!groups[key]) {
result.push(groups[key] = { date: o.date, shift: o.shift, data: [] });
}
groups[key].data.push(o);
return r;
}, []);
您可以在每次迭代时通过
.filter()
检查匹配项是否已经存在,循环一次。如果没有,那么创建它。无论如何,将唯一的ish值添加到组中
:
//Test data
var items = [
{
"date": "2019-07-11",
"hour": "12:00",
"idAppointmentsHour": 47914218,
"shift": "T"
}, {
"date": "2019-07-11",
"hour": "12:01",
"idAppointmentsHour": 47914219,
"shift": "T"
}, {
"date": "2019-07-11",
"hour": "12:02",
"idAppointmentsHour": 47914220,
"shift": "T"
}, {
"date": "2019-07-11",
"hour": "12:03",
"idAppointmentsHour": 47914218,
"shift": "TY"
},
];
//The logic
var output = [];
for (var item of items) {
var existent = output.filter(function(current) {
return ((item.date === current.date) && (item.shift === current.shift));
});
existent = (existent.length ? existent[0] : {date: item.date, shift: item.shift, group : []});
if (!existent.group.length) output.push(existent);
existent.group.push({
idAppointmentsHour: item.idAppointmentsHour,
hour: item.hour
});
}
你有更多的数据和想要的结果吗?上面的“turno”实际上应该是从你的样本数据中“转移”出来的吗?为什么你使用
包含,而不使用集合?你是在尝试将结果分组为类似的项目组,还是将每组减少为一个唯一的代表?也就是说,输出的结果数应该与输入的结果数相同,只是排列和分类不同,还是我们应该得到一个较小的集合?预期结果是:{“日期”:“2019-07-11”,“turno”:[M,T]}或{“日期”:“2019-07-11”,“turno”:M}预期结果是:{“日期”:“2019-07-11”,“turno”:[M,T]}或{“日期”:“2019-07-11”,“turno”:M}@mresende那么,如果两个不同的项具有相同的日期和时间,那么它们应该是输出中的单个对象,具有存储移位值的turno数组?