我有2个JSON对象
obj1 = [
{
"start": "2019-11-15T00:00:00",
"end": "2019-11-15T23:59:59",
"Room Night": "2019-11-15"
},
{
"start": "2019-11-13T00:00:00",
"end": "2019-11-13T23:59:59",
"Room Night": "2019-11-13"}
{
"start": "2019-11-14T00:00:00",
"end": "2019-11-14T23:59:59",
"Room Night": "2019-11-14"
}
]
和
obj2 = [
{
"start": "2019-11-15T00:00:00",
"end": "2019-11-15T23:59:59",
"Room Night": "2019-11-15"
},
{
"start": "2019-11-13T00:00:00",
"end": "2019-11-13T23:59:59",
"Room Night": "2019-11-13"
},
{
"start": "2019-11-16T00:00:00",
"end": "2019-11-16T23:59:59",
"Room Night": "2019-11-16"
},
{
"start": "2019-11-17T00:00:00",
"end": "2019-11-17T23:59:59",
"Room Night": "2019-11-17"
}
]
在上述2个JSON中,我有2个重复的“ Room Nights”,日期分别为2019-11-13和2019-11-15。我想删除所有重复的值,并以JSON格式获取如下输出。
[
{
"start": "2019-11-14T00:00:00",
"end": "2019-11-14T23:59:59",
"Room Night": "2019-11-14"
},
{
"start": "2019-11-16T00:00:00",
"end": "2019-11-16T23:59:59",
"Room Night": "2019-11-16"
},
{
"start": "2019-11-17T00:00:00",
"end": "2019-11-17T23:59:59",
"Room Night": "2019-11-17"
}
]
请帮忙解决一下。
关于, 假装。
答案 0 :(得分:1)
let obj1= [
{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},
{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},
{"start": "2019-11-14T00:00:00", "end": "2019-11-14T23:59:59", "Room Night": "2019-11-14"}
];
let obj2= [
{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},
{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},
{"start": "2019-11-16T00:00:00", "end": "2019-11-16T23:59:59", "Room Night": "2019-11-16"},
{"start": "2019-11-17T00:00:00", "end": "2019-11-17T23:59:59", "Room Night": "2019-11-17"}
]
const merged = obj1.concat(obj2);
const duplicates = obj2.filter(o=> obj1.some(s=> s["Room Night"]==o["Room Night"]));
const result = merged.filter(f=> !duplicates.some(s=>
s["Room Night"] == f["Room Night"]
));
console.log(result);
没有箭头功能:
let obj1= [
{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},
{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},
{"start": "2019-11-14T00:00:00", "end": "2019-11-14T23:59:59", "Room Night": "2019-11-14"}
];
let obj2= [
{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},
{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},
{"start": "2019-11-16T00:00:00", "end": "2019-11-16T23:59:59", "Room Night": "2019-11-16"},
{"start": "2019-11-17T00:00:00", "end": "2019-11-17T23:59:59", "Room Night": "2019-11-17"}
]
const merged = obj1.concat(obj2);
const duplicates = obj2.filter( function(o) {
return obj1.some(function(s) {
return s["Room Night"] ==o ["Room Night"];
});
});
const result = merged.filter(function(f) {
return !duplicates.some(function(s) {
return s["Room Night"] == f["Room Night"] }
);
});
console.log(result);
答案 1 :(得分:1)
此解决方案虽然不好,但可以完成工作。我不建议使用JSON.stringify将对象用作键,但这就是我在这里所做的:
const obj1 = [
{ start: '2019-11-15T00:00:00', end: '2019-11-15T23:59:59', 'Room Night': '2019-11-15' },
{ start: '2019-11-13T00:00:00', end: '2019-11-13T23:59:59', 'Room Night': '2019-11-13' },
{ start: '2019-11-14T00:00:00', end: '2019-11-14T23:59:59', 'Room Night': '2019-11-14' }
]
const obj2 = [
{ start: '2019-11-15T00:00:00', end: '2019-11-15T23:59:59', 'Room Night': '2019-11-15' },
{ start: '2019-11-13T00:00:00', end: '2019-11-13T23:59:59', 'Room Night': '2019-11-13' },
{ start: '2019-11-16T00:00:00', end: '2019-11-16T23:59:59', 'Room Night': '2019-11-16' },
{ start: '2019-11-17T00:00:00', end: '2019-11-17T23:59:59', 'Room Night': '2019-11-17' }
]
const s = s => JSON.stringify(s)
const p = s => JSON.parse(s)
const combined = [...obj1, ...obj2]
const mapEntries = [...combined.reduce((a, v) => a.set(s(v), (a.get(s(v)) || 0) + 1), new Map()).entries()]
const out = mapEntries.reduce((a, v) => (v[1] === 1 && a.push(p(v[0])), a), [])
console.log(out)
答案 2 :(得分:-2)
let obj1= [{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},{"start": "2019-11-14T00:00:00", "end": "2019-11-14T23:59:59", "Room Night": "2019-11-14"}];
let obj2=[{"start": "2019-11-15T00:00:00", "end": "2019-11-15T23:59:59", "Room Night": "2019-11-15"},{"start": "2019-11-13T00:00:00", "end": "2019-11-13T23:59:59", "Room Night": "2019-11-13"},{"start": "2019-11-16T00:00:00", "end": "2019-11-16T23:59:59", "Room Night": "2019-11-16"},{"start": "2019-11-17T00:00:00", "end": "2019-11-17T23:59:59", "Room Night": "2019-11-17"}]
obj1 = obj1.concat(obj2);
let temp=[];
let result=[];
obj1.forEach(x=>{
if(temp.indexOf(x['Room Night']) == -1){
temp.push(x['Room Night']);
result.push(x);
}
})
console.log(result);