方法一:循环判断当前元素与其后面所有元素对比是否相等,如果相等删除;(执行速度慢)
var arr = [1 ,23 ,1 ,1 ,1 ,3 ,23 ,5 ,6 ,7 ,9 ,9 ,8 ,5 ];
function removeDuplicatedItem (arr ) {
for (var i = 0 ; i < arr.length -1 ; i++){
for (var j = i+1 ; j < arr.length ; j++){
if (arr[i]==arr[j]){
arr.splice (j,1 );
j--;
}
}
}
return arr;
}
arr2 = removeDuplicatedItem (arr);
console .log (arr);
console .log (arr2);
方法二:借助新数组 判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
function unique4 (arr ){
var res = [];
for (var i=0 ; i<arr.length ; i++){
if (res.indexOf (arr[i]) == -1 ){
res.push (arr[i]);
}
}
return res;
}
console .log (unique4 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法三:利用对象属性存在的特性,如果没有该属性则存入新数组。
function unique3 (arr ){
var res = [];
var obj = {};
for (var i=0 ; i<arr.length ; i++){
if ( !obj[arr[i]] ){
obj[arr[i]] = 1 ;
res.push (arr[i]);
}
}
return res;
}
console .log (unique3 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法四:先将原数组排序,在与相邻的进行比较(新数组最后一个元素),如果不同则存入新数组。
function unique2 (arr ){
var arr2 = arr.sort ();
var res = [arr2[0 ]];
for (var i=1 ; i<arr2.length ; i++){
if (arr2[i] !== res[res.length -1 ]){
res.push (arr2[i]);
}
}
return res;
}
console .log (unique2 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法五:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中
function unique (arr ){
var res = [arr[0 ]];
for (var i=1 ; i<arr.length ; i++){
var repeat = false ;
for (var j=0 ; j<res.length ; j++){
if (arr[i] === res[j]){
repeat = true ;
break ;
}
}
if (!repeat){
res.push (arr[i]);
}
}
return res;
}
console .log (unique ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法六:利用数组原型对象上的includes方法。
function unique5 (arr ){
var res = [];
for (var i=0 ; i<arr.length ; i++){
if ( !res.includes (arr[i]) ){
res.push (arr[i]);
}
}
return res;
}
console .log (unique5 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法七:利用数组原型对象上的 lastIndexOf 方法。
function unique9 (arr ){
var res = [];
for (var i=0 ; i<arr.length ; i++){
res.lastIndexOf (arr[i]) !== -1 ? '' : res.push (arr[i]);
}
return res;
}
console .log (unique9 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法八:利用 ES6的set 方法。
function unique10 (arr ){
return Array .from (new Set (arr));
}
console .log (unique10 ([1 ,1 ,2 ,3 ,5 ,3 ,1 ,5 ,6 ,7 ,4 ]));
方法九:借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等
var ar = [1 ,23 ,1 ,1 ,1 ,3 ,23 ,5 ,6 ,7 ,9 ,9 ,8 ,5 ];
function rep2 (arr ) {
for (var i = 0 ; i < arr.length ; i++) {
if (arr.indexOf (arr[i]) != i) {
arr.splice (i,1 );
i--;
}
}
return arr;
}
var a1 = rep2 (ar);
console .log (ar);
console .log (a1);
方法十:利用数组中的filter方法
var arr = ['apple' ,'strawberry' ,'banana' ,'pear' ,'apple' ,'orange' ,'orange' ,'strawberry' ];
var r = arr.filter (function (element,index,self ){
return self.indexOf (element) === index;
});
console .log (r);
方法十一:双重循环,判断当前元素是否与后边元素有重复,如果没有重复,push进新数组,有重复则将重复元素中最后一个元素push进新数组
var arr = [12 , 2 , 44 , 3 , 2 , 32 , 33 , -2 , 45 , 33 , 32 , 3 , 12 ];
var newArr = [];
for (var i = 0 ; i < arr.length ; i++) {
var repArr = [];
for (var j = i + 1 ; j < arr.length ; j++) {
if (arr[i] == arr[j]) {
repArr.push (j);
}
}
if (repArr.length == 0 ) {
newArr.push (arr[i]);
}
}
console .log (newArr);
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单