We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
思路:比较新数组中是否有原数组中的重复项,如果有重复的就不添加到新数组
function unique(arr){ var newarr = []; for(var i = 0; i<arr.length; i++){ // 遍历新数组,判定是否元素已经存在 for(var j=0;j<newarr.length; j++){ if(arr[i]===newarr[j]){ break; } } // 对于循环完成的元素进行push if(j == newarr.length){ newarr.push(arr[i]) } } return newarr }
思路:如果一个元素的indexOf()不等于本身的索引就是重复的
function unique(arr){ var newarr = []; arr.forEach((item,idx,array)=>{ array.indexOf(item)===idx && newarr.push(item); }) return newarr }
// 反过来就是说我们过滤掉indexOf() 不等于本身的索引的元素 function unique(arr){ var newarr = arr.filter((item,idx,array)=>{ return array.indexOf(item)===idx; }) return newarr }
思路:利用数组的sort()方法,相同的元素会被放到相邻的位置,然后比较前后位置就可以了。
function unique(arr){ var newarr = arr.concat().sort().filter((item,idx,array)=>{ // !idx是针对第一个元素,没有比较直接返回 return !idx || item != array[idx-1]; }) } var a = [1, 1, 3, 2, 1, 2, 4]; unique(a); //[1, 2, 3, 4] var a = [1, '1', 3, 2, 1, 2, 4]; unique(a); //[1, 2, 3, 4]
这里就有问题了,由于我们用的是不完成等于!=,所以这种情况只是针对于数字之间的比较,如果输入字符串,可能会被过滤掉。
!=
**拓展:**为什么我这里不用严格的不等于呢?!==,这样的话就不能排除特殊情况下的数字,这里根据需求来写
!==
// 如果是 return !idx || item !== array[idx-1]; var a = [1, '1',1, 3, 2, 2, 4]; unique(a); //[1,'1',1, 2, 3, 4]
思路:通过es6的set的值唯一性,把数组去掉重复的,然后用Array.from()把迭代的对象变成数组
function unique(arr){ return Array.from(new set(arr)); }
**思路:**利用for循环中,++i可以进入下一个循环,跳过已经重复的元素
function unique(a) { var res = []; for (var i = 0, len = a.length; i < len; i++) { for (var j = i + 1; j < len; j++) { // 这一步十分巧妙 // 如果发现相同元素 // 则 i 自增进入下一个循环比较 if (a[i] === a[j]) j = ++i; } res.push(a[i]); } return res; } var a = [1, 1, '1', '2', 1]; var ans = unique(a); console.log(ans); // => ["1", "2", 1]
参考链接 数组去重
The text was updated successfully, but these errors were encountered:
No branches or pull requests
数组去重的思考
第一种
思路:比较新数组中是否有原数组中的重复项,如果有重复的就不添加到新数组
第二种(不考虑兼容)
思路:如果一个元素的indexOf()不等于本身的索引就是重复的
第三种(只针对数组都是数字)
思路:利用数组的sort()方法,相同的元素会被放到相邻的位置,然后比较前后位置就可以了。
这里就有问题了,由于我们用的是不完成等于
!=
,所以这种情况只是针对于数字之间的比较,如果输入字符串,可能会被过滤掉。**拓展:**为什么我这里不用严格的不等于呢?
!==
,这样的话就不能排除特殊情况下的数字,这里根据需求来写第四种 (ES6的set构造函数)
思路:通过es6的set的值唯一性,把数组去掉重复的,然后用Array.from()把迭代的对象变成数组
第五种(重复的元素会出现在数组的结尾,改变了数组的格局)
**思路:**利用for循环中,++i可以进入下一个循环,跳过已经重复的元素
参考链接
数组去重
The text was updated successfully, but these errors were encountered: