,所以没敢说话,我一直在走,他继续跟着我要,然后巴拉巴拉,我看了那男的几眼在纠结要不要给 (ps: 过后删),不给会不会伤我,最后我看他手上也没拿什么危险东西,面相还好(ps: 不凶),应该是安全的,我继续不吭声,也没给微信,转弯处,我就快速走掉了,那么问题就来了,在外面被陌生人要微信,要给吗?另外采访一下,男的要陌生女的微信到底是什么心思呢? 以下是一段可以实现对象属性逐一比对,取有值属性的 JavaScript 代码:
```javascript
function compareObjects(obj1, obj2) {
const result = {};
for (let key in obj1) {
if (obj1.hasOwnProperty(key)) {
if (obj1[key] && typeof obj1[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj1[key] || obj2[key];
}
}
}
for (let key in obj2) {
if (!result.hasOwnProperty(key) && obj2.hasOwnProperty(key)) {
if (obj2[key] && typeof obj2[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj2[key];
}
}
}
return result;
}
```
其中,函数 `compareObjects` 接收两个参数,分别为需要比对的两个对象。首先,定义一个空对象 `result` 用于存储比对的结果。接下来遍历对象 `obj1`,如果当前属性值为对象或数组对象,递归比对该属性值;否则,将该属性值与相应属性在 `obj2` 对象中的属性值进行比较,取非空值。最后,再遍历对象 `obj2`,如果当前属性在结果集 `result` 中不存在,则重复上述处理。在比对完成后,返回结果集 `result`。
需要注意的是,这段代码并未对输入数据进行完整性检查,因此在使用前需要保证两个比对对象都存在且为对象类型。
```javascript
function compareObjects(obj1, obj2) {
const result = {};
for (let key in obj1) {
if (obj1.hasOwnProperty(key)) {
if (obj1[key] && typeof obj1[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj1[key] || obj2[key];
}
}
}
for (let key in obj2) {
if (!result.hasOwnProperty(key) && obj2.hasOwnProperty(key)) {
if (obj2[key] && typeof obj2[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj2[key];
}
}
}
return result;
}
```
其中,函数 `compareObjects` 接收两个参数,分别为需要比对的两个对象。首先,定义一个空对象 `result` 用于存储比对的结果。接下来遍历对象 `obj1`,如果当前属性值为对象或数组对象,递归比对该属性值;否则,将该属性值与相应属性在 `obj2` 对象中的属性值进行比较,取非空值。最后,再遍历对象 `obj2`,如果当前属性在结果集 `result` 中不存在,则重复上述处理。在比对完成后,返回结果集 `result`。
需要注意的是,这段代码并未对输入数据进行完整性检查,因此在使用前需要保证两个比对对象都存在且为对象类型。
展开
评论
2
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)