lodash对象比较
时间: 2023-10-19 12:15:46 浏览: 38
如果您想比较两个lodash对象是否相等,可以使用`_.isEqual()`方法。它会递归比较两个对象的属性值是否相等。
例如,比较两个对象`obj1`和`obj2`:
```
const obj1 = { name: 'John', age: 25 };
const obj2 = { name: 'John', age: 25 };
console.log(_.isEqual(obj1, obj2)); // true
```
如果两个对象的属性值都相等,则返回`true`,否则返回`false`。
需要注意的是,如果对象中存在循环引用,则`_.isEqual()`方法可能会导致栈溢出错误。
相关问题
lodash 对象深复制
lodash提供了一个方便的方法来实现对象的深复制,即`_.cloneDeep()`。这个方法可以用来创建一个目标对象的完全副本,包括所有的嵌套对象和数组。以下是使用`_.cloneDeep()`实现对象深复制的示例:
```javascript
const _ = require('lodash');
const sourceObject = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
},
hobbies: ['reading', 'running'],
};
const copiedObject = _.cloneDeep(sourceObject);
console.log(copiedObject);
```
运行以上代码,`copiedObject`将会是一个与`sourceObject`完全相同的对象。修改`copiedObject`的属性不会影响到`sourceObject`。
值得注意的是,`_.cloneDeep()`方法会递归地复制嵌套的对象和数组,因此对于包含大量数据的复杂对象,可能会引起性能问题。在某些情况下,如果只需要创建一个浅复制,可以使用`_.clone()`方法来代替`_.cloneDeep()`。
lodash两个对象比较并返回不一样的属性
如果您想比较两个lodash对象,并返回这两个对象中不同的属性,可以使用`_.reduce()`方法和`_.difference()`方法。
下面是一个示例代码:
```
const _ = require('lodash');
const obj1 = { name: 'John', age: 25, city: 'New York' };
const obj2 = { name: 'John', age: 30, country: 'USA' };
const diffProps = (obj1, obj2) => {
const keys = _.union(_.keys(obj1), _.keys(obj2));
return _.reduce(keys, (result, key) => {
if (!_.isEqual(obj1[key], obj2[key])) {
result.push(key);
}
return result;
}, []);
};
console.log(diffProps(obj1, obj2)); // ['age', 'city', 'country']
```
在上面的代码中,`_.union()`方法用于获取两个对象的所有属性名,`_.reduce()`方法逐个比较两个对象中的属性值,如果属性值不相等,则将属性名添加到结果数组中。最后使用`_.difference()`方法获取结果数组中不同的属性名。
需要注意的是,如果两个对象中有数组或对象类型的属性值,则`_.isEqual()`方法可能会递归比较这些属性值,导致栈溢出错误。如果您需要比较数组或对象类型的属性值,请使用递归方法或其他工具库。