现在有两个对象,一个是A 一个是B A中有和B中相同的属性名,现在我想得到AB不相同的部分应该怎么弄呢?
备注:键名相同的就不要
const pickDiffAttr = (obj1, obj2) => Object.keys(obj2).reduce((ret, attr) => {
if (ret[attr]) delete ret[attr]
else ret[attr] = obj2[attr]
return ret
}, {...obj1})
const a = {a:1, b:2, c:3}
const b = {a:2, d:4, f:5}
pickDiffAttr(a, b)
只要键名相同的就不要,还是要一模一样的键值才不要?
虽然思路类似,reduce
方法确实巧妙多了
var obj1 = {
a: 1,
b: 2,
c: {
a: 3
},
d: [4, 5]
}
var obj2 = {
a: {
b: 1
},
c: {
a: 2
},
d: 3,
e: [4, 5]
}
function filterSameKey (o1, o2) {
let subset = {}
let remain = JSON.parse(JSON.stringify(o2))
for (let key of Object.keys(o1)) {
remain.hasOwnProperty(key) ? delete remain[key] : (subset[key] = o1[key])
}
return Object.assign(subset, remain)
}
filterSameKey(obj1, obj2)
var anObj = { 100: 'a', 2: 'b', 7: 'c',44:'dssdd' };
var bObj = { 100: 'a', 2: 'b', 7: 'c' ,9:'cs存储'};
function csFun(aObj,bObj){
let aArr= Object.keys(aObj)
let bArr=Object.keys(bObj)
let a2=aArr.filter(word => bArr.indexOf(word)===-1);
let b2=bArr.filter(word => aArr.indexOf(word)===-1);
let rObj={}
a2.forEach(function(e){
rObj[e]=aObj[e]
});
b2.forEach(function(e){
rObj[e]=bObj[e]
});
return rObj
}
console.log(csFun(anObj,bObj));
虽然不如下面的用reduce方法简洁,不过还是弄上来吧
var obj1={"name":11111,"age":22222,"type":33333};
var obj2={"name":11111,"age2":444,"type":5555};
for(let key in obj1){
for(let key2 in obj2){
if(obj2[key]){
delete obj2[key]
}
}
};
想得到所有的随后两个对象合并就好了
直接用includes方法判断就好啦
const a = {d: 1, e: 2, c: 3}
const b = {d: 1, e: 8, f: 5}
const za = Object.keys(a)
const kb = Object.keys(b)
const result = za.map(item => {
if (!kb.includes(item)) {
return item
}
})
也可以直接像楼上那种写法
const a = {d: 1, e: 2, c: 3}
const b = {d: 1, e: 8, f: 5}
const result = []
for (let item in a) {
if (!b[item])
result.push(item)
}
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决