js两组数据删除相同属性
时间: 2024-09-13 22:04:30 浏览: 52
在JavaScript中,如果你想从两组数据(可以看作是对象数组)中删除具有相同属性值的数据,你可以采用以下几种方法:
1. **使用双重循环**:
```javascript
let array1 = [{name: 'A'}, {name: 'B'}];
let array2 = [{name: 'C'}, {name: 'D'}, {name: 'B'}];
for (let i of array1) {
if (array2.some(item => item.name === i.name)) {
array2 = array2.filter(item => item.name !== i.name);
}
}
```
这段代码会遍历`array1`,如果发现`array2`中有相同的`name`,就将其从`array2`中移除。
2. **使用`Set`和`filter`结合**:
```javascript
let array1 = [{name: 'A'}, {name: 'B'}];
let array2 = [{name: 'C'}, {name: 'D'}, {name: 'B'}];
let uniqueNames = [...new Set([...array1.map(item => item.name), ...array2.map(item => item.name)])];
array2 = array2.filter(item => !uniqueNames.includes(item.name));
```
先合并两个数组的`name`值到一个`Set`中去重,然后过滤出`array2`中不在`uniqueNames`中的项。
3. **使用`lodash`库的`_.differenceWith`函数**:
如果你已经引入了lodash库,可以利用其提供的专门用于处理数组差异的功能:
```javascript
const _ = require('lodash');
let array1 = [{name: 'A'}, {name: 'B'}];
let array2 = [{name: 'C'}, {name: 'D'}, {name: 'B'}];
array2 = _.differenceWith(array2, array1, _.isEqual.bind(_.property('name')));
```
`_.differenceWith`会比较数组元素的指定属性,而不是整个对象。
以上都是基于对象的`name`属性进行操作,你可以根据实际需求替换`name`为你需要比较的属性名。
阅读全文