javaScript中数组去重(包含对象类型,数组类型…)
var arr = [{ a: 1, age: 2 }, { a: 1, age: 2 }, { a: 1 }, [1, 2], [1, 2], 1, 2, 3, 1, 2, 3]
此方法针对以上数组的去重
思路
- 先把数组每一项转换为JSON字符串
- 然后按照字符串去重
- 最后在把数组每一项转换为JSON格式
代码
先把数组每一项转换为JSON字符串
var arr = [{ a: 1, age: 2 }, { a: 1, age: 2 }, { a: 1 }, [1, 2], [1, 2]]
// 数组每一项转换为JSON字符串
for (var i = 0; i < arr.length; i++) {
arr[i] = JSON.stringify(arr[i])
}
这里转换为JSON字符串是因为js转换为字符串类型是看不到实际内容的只会看到对象的类型,是没办法去重的。
通过以上方法可得到:
然后按照字符串去重
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]) // 添加新的数组里
}
}
这段代码运行结果:
最后在把数组每一项转换为JSON格式
for (var i = 0; i < newArr.length; i++) {
newArr[i] = JSON.parse(newArr[i])
}
最终结果:
将所有代码封装为函数
var arr = [{ a: 1, age: 2 }, { a: 1, age: 2 }, { a: 1 }, [1, 2], [1, 2]]
function fn(arr) {
var newArr = []
// 现将里面所有内容转换为json字符串
for (var i = 0; i < arr.length; i++) {
arr[i] = JSON.stringify(arr[i])
}
// 字符串去重
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]) // 添加新的数组里
}
}
// 在将里面的所有内容转换为json格式
for (var i = 0; i < newArr.length; i++) {
newArr[i] = JSON.parse(newArr[i])
}
return newArr
}
console.log(fn(arr)) // [{a:1, age: 2}, {a:1}, [1,2], 1, 2, 3]