在 jQuery 中合并多个数组并去重,推荐使用原生 JavaScript 的 Set 对象(高效简单)或 $.unique()(仅适用于 DOM 元素,不适用于普通数组)。以下是完整解决方案:
方法 1:使用 ES6 Set(推荐)
// 定义多个数组
const arr1 = [1, 2, 3];
const arr2 = [2, 3, 4];
const arr3 = [3, 4, 5];
// 合并数组并用 Set 去重
const mergedArray = [...new Set([...arr1, ...arr2, ...arr3])];
console.log(mergedArray); // 输出: [1, 2, 3, 4, 5]
方法 2:使用 jQuery + 原生 JS(兼容旧浏览器)
// 定义多个数组
const arr1 = [1, 2, 3];
const arr2 = [2, 3, 4];
const arr3 = [3, 4, 5];
// 使用 $.merge() 合并数组
const merged = $.merge($.merge([], arr1), arr2); // 合并前两个
const finalMerged = $.merge(merged, arr3); // 合并第三个
// 手动去重(兼容 IE)
const uniqueArray = finalMerged.filter((item, index) => {
return finalMerged.indexOf(item) === index;
});
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
封装成通用函数
function mergeUnique(...arrays) {
const merged = [].concat(...arrays);
return [...new Set(merged)]; // ES6 方式
// 或兼容旧版: return merged.filter((v, i) => merged.indexOf(v) === i);
}
// 使用示例
const result = mergeUnique(arr1, arr2, arr3);
console.log(result); // [1, 2, 3, 4, 5]
重要说明:
$.unique()
不适用于普通数组
jQuery 的$.unique()
仅用于 DOM 元素数组去重,不可用于数字/字符串数组。推荐使用原生 JavaScript
现代浏览器中,Set
方案性能最佳(时间复杂度 O(n)),代码最简洁。对象数组去重
如果数组元素是对象,需自定义去重逻辑(如基于特定属性):const users = [{id:1}, {id:2}, {id:1}]; const uniqueUsers = users.filter( (v, i, a) => a.findIndex(t => t.id === v.id) === i );
总结方案选择:
场景 | 推荐方案 |
---|---|
现代浏览器 | [...new Set([...arr1, ...arr2])] |
兼容旧浏览器 | $.merge + filter + indexOf |
对象数组 | 自定义 filter 逻辑 |