JavaScript中,可以通过使用Set来进行数组去重,而jQuery中也提供了unique
方法来实现。
以下是使用原生JavaScript和jQuery分别对对象数组去重的示例代码:
使用原生JavaScript进行对象数组去重
const arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 1, name: 'Alice'},
{id: 3, name: 'Charlie'},
{id: 2, name: 'Bob'}
];
const uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(uniqueArr);
解释:
- 通过
arr.map(JSON.stringify)
将对象数组中的每个对象转换为字符串 - 通过
new Set
去重字符串数组 - 通过
Array.from
将Set
转换为数组 - 通过
map
将字符串转换为对象
输出结果:
[
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Charlie'}
]
使用jQuery进行对象数组去重
const arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 1, name: 'Alice'},
{id: 3, name: 'Charlie'},
{id: 2, name: 'Bob'}
];
const uniqueArr = $.unique(arr);
console.log(uniqueArr);
输出结果:
[
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Charlie'}
]
以上两种方法都可以实现对象数组的去重。如果需要更好的性能,可以根据具体情况选择最合适的方法。
Js和Jquery如何把不同顺序属性且有5个属性的对象数组去重
如果要去重的对象数组包含5个属性,且属性顺序不同,可以将对象的属性按照一定的顺序进行排序,然后将排序后的属性值拼接成一个字符串作为判断依据进行去重。
下面是使用 JavaScript 的方法来去重对象数组的示例代码:
// 定义对象数组
const arr = [
{ id: 1, name: 'Alice', age: 20, gender: 'female', address: 'Beijing' },
{ gender: 'male', age: 25, address: 'Shanghai', name: 'Bob', id: 2 },
{ gender: 'female', name: 'Alice', age: 20, address: 'Beijing', id: 1 },
{ address: 'Shenzhen', id: 3, age: 30, name: 'Charlie', gender: 'male' },
];
// 定义一个 Set 来进行去重
const set = new Set(arr.map(item => {
// 对象属性按照固定顺序进行排序
const sortedItem = {
address: item.address,
age: item.age,
gender: item.gender,
id: item.id,
name: item.name,
};
// 将排序后的属性值拼接成一个字符串作为判断依据
return JSON.stringify(sortedItem);
}));
// 将 Set 转换成数组,并将字符串转换成对象
const result = Array.from(set).map(str => JSON.parse(str));
console.log(result);
// 输出:[
// { id: 1, name: 'Alice', age: 20, gender: 'female', address: 'Beijing' },
// { gender: 'male', age: 25, address: 'Shanghai', name: 'Bob', id: 2 },
// { address: 'Shenzhen', id: 3, age: 30, name: 'Charlie', gender: 'male' },
// ]
以上代码中,首先定义一个固定顺序的对象来对每个对象的属性进行排序。然后将排序后的属性值拼接成一个字符串作为判断依据,并使用Set
进行去重。最后将 Set
转换成数组,并将字符串转换成对象,得到一个去重后的对象数组。
如果要在 jQuery 中进行对象数组去重,可以使用 $.unique
函数,并指定一个比较函数来进行判断。
下面是使用 jQuery 的方法来去重对象数组的示例代码:
// 定义对象数组
const arr = [
{ id: 1, name: 'Alice', age: 20, gender: 'female', address: 'Beijing' },
{ gender: 'male', age: 25, address: 'Shanghai', name: 'Bob', id: 2 },
{ gender: 'female', name: 'Alice', age: 20, address: 'Beijing', id: 1 },
{ address: 'Shenzhen', id: 3, age: 30, name: 'Charlie', gender: 'male' },
];
// 使用 $.unique 函数进行去重
$.unique(arr, false, item => {
// 对象属性按照固定顺序进行排序
const sortedItem = {
address: item.address,
age: item.age,
gender: 'male',
id: item.id,
name: item.name,
};
// 将排序后的属性值拼接成一个字符串作为判断依据
return JSON.stringify(sortedItem);
});
console.log(arr);
// 输出:[
// { id: 1, name: 'Alice', age: 20, gender: 'female', address: 'Beijing' },
// { gender: 'male', age: 25, address: 'Shanghai', name: 'Bob', id: 2 },
// { address: 'Shenzhen', id: 3, age: 30, name: 'Charlie', gender: 'male' },
// ]
以上代码中,使用 $.unique
函数进行去重,并指定一个比较函数来进行判断。比较函数中,同样按照固定顺序对每个对象的属性进行排序,并将排序后的属性值拼接成一个字符串作为判断依据。最后输出去重后的对象数组。
需要注意的是,jQuery 3.x 版本中已经移除了 $.unique
函数,如果需要使用该函数,可以考虑使用 jQuery Migrate
插件或者自行实现去重功能。