js基础操纵-数组去重
数组去重的要领
1. 暂时数组保存(实在这内里还没考虑到数组内里嵌套数组/对象的状况)
把去重后的效果放在一个暂时数组中, 对本来数组的元素与暂时数组元素比较, 暂时数组中不存在这个元素的, 放入暂时数组。
function unique (arr) {
if (!Array.isArray(arr)) return arr;
var result = [];
arr.map(function (item) {
if (result.indexOf(item) == -1) {
result.push(item);
}
})
return result;
}
2. 应用对象去重(当数组的键为 11, ’11’时, 会保存第一个涌现的值)
建立一个新的数组寄存效果, 和一个空的对象。for轮回时, 每次掏出一个元素与对象举行对照, 假如这个元素不反复, 则把它寄存到效果数组中, 同时把这个元素的内容作为一个对象的属性, 并赋值, 存入对象中。
function unique (arr) {
if (!Array.isArray(arr)) return arr;
var result = [];
var obj = {}
arr.map(function (item) {
if (!obj[item]) {
result.push(item);
obj[item] = 1
};
})
return result;
}
3. 先排序, 后去重
先把数组排序, 然后比较相邻的两个值。排序的时刻用原生的 sort 要领, JS引擎内部运用的是疾速排序。
function unique(arr) {
if (!Array.isArray(arr)) return arr;
if (arr.length < 2) return arr;
arr.sort(); // sort在元数组举行排序, 不天生副本
var result = [arr[0]]
arr.map(function (item, index, arr) {
if (index > 0) {
if (item !== arr[index - 1]) {
result.push(item);
}
}
})
return result;
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));
4. 应用 ES6 的 Set 对象 和 Array.from 要领
Set对象: 它是ES6新增的有序列表鸠合, 不会包括反复项。
Array.from()要领: 将一个类数组或可遍历对象转换成真正的数组。
function unique (arr) {
if (!Array.isArray(arr)) return arr;
if (arr.length < 2) return arr;
return Array.from(new Set(arr))
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));
5.应用 filter 和 Map 对象
function unique(arr) {
if (!Array.isArray(arr)) return arr;
if (arr.length < 2) return arr;
return arr.filter(function(item, index, arr) {
if (arr.indexOf(item) === index) {
return true;
}
});
}
var arr = [99, 88, 22, 22, 44, 88, 99, '99']
console.log(unique(arr));