字符串:利用对象属性来判断
function removeRepeatStr(str){
var obj = {};
var newStr = '';
var len = str.length;
for(var i=0; i<len; i++){
if(!obj[str[i]]){
newStr = newStr + str[i];
obj[str[i]] = 1;//注意,这里的1是给对象属性赋值,这个值可以任意取。意思是把每个遍历的字符作为对象属性并赋值保存,保证该属性的唯一性
}
}
return newStr;
数组去重:
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
这里注意:如果直接return new Set([...a, ...b]) ,返回是一个对象,加上Array.from返回的才是一个去重后的数组
const set = new Set([1, 2, 3, 4, 4]);
console.log([...set])//[1,2,3,4]
var arr1 = [1,2,3,4,5,6],arr2 = [1,2,7,8,9]
// ES6 //注意返回的是一个对象,并不是数组
function fileRepeat(a,b) {
return Array.from(new Set([...a, ...b]))
}
var newarray = fileRepeat(arr1,arr2)
console.log(newarray)
对象属性:
const set = new Set([1, 2, 3, 4, 4]);
//如果不适用Array.form 返回的是一个对象
console.log("去重:",Array.from(set) )
var data = [
{id:1, age:10},
{id:2, age:2},
{id:4, age:3},
{id:5, age:99},
{id:1, age:88},
{id:17, age:23},
{id:8, age:23},
{id:9, age:23},
]
function removeRepeat(arr) {
var result = [];
var obj = {};
var len = arr.length;
for(var i= 0; i < len; i++) {
if(!obj[arr[i].id]) {
result.push(arr[i]);
obj[arr[i].id] = true;
}
}
console.log(result)
}
removeRepeat(data)
//方法二
// 方法2:利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
var obj = {};
arr = arr.reduce(function(item, next) {
obj[next.key] ? '' : obj[next.key] = true && item.push(next);
return item;
}, []);
console.log(arr); // [{key: "01", value: "乐乐"},{key: "02", value: "博博"},{key: "03", value: "淘淘"},{key: "04", value: "哈哈"}]