var arr = [2,4,1,2,2,2,2,4,6,5,9,4,4,5,2];
for(i=0;i<arr.length;i++){
var a = arr[i];
for(a=i+1;a<arr.length;a++){
if(arr[i]==arr[a]){
arr.splice(a,1); //删除索引为a的这个元素;这里不能使用delete,因为delete删除后索引还在;
a = a-1;
}
// while(arr[i]==arr[a]){ //使用while和if的效果一样;
// arr.splice(a,1);
// a = a-1;
// }
}
}
console.log(arr);
方式二(使用一个for循环和空数组、空对象、及if判断语句)执行效率相对方式一高点
var arr = [2,4,1,2,2,2,2,4,6,5,9,4,4,5,2];
var newArr = [];
var o = {}; // { 1:true, 2:true}
for (let i = 0; i < arr.length; i++) {
var t = arr[i];
if(o[t]){ // 标记是否处理过
}else{
newArr.push(arr[i]);
o[t] = true;
}
}
console.log(newArr)
二,统计数组中各元素的个数
方式一(使用两个for循环和if判断语句,一个空对象)效率相对低
var arr = [2,4,1,2,2,2,2,4,6,5,9,4,4,5,2];
var obj = {}
for(i=0;i<arr.length;i++){
var b = 1;
for(a=i+1;a<=arr.length;a++){
if(arr[i]==arr[a]){
b++;
arr.splice(a,1); //删除数组索引a处的元素;
a = a-1; //当删除一个元素之后,要执行的if语句中的a索引需要减一;
}
obj[arr[i]] = b;
}
}
console.log(obj);
方式二(使用一个for循环和if判断语句)效率相对方式一高点
var a = [2,4,1,2,2,2,2,4,6,5,9,4,4,5,2];
function f(a) {
var obj = {};
for (let i = 0; i < a.length; i++) {
var t = a[i];
if (obj.hasOwnProperty(t)){ //判断t属性是否为对象obj中的属性;
obj[t] = obj[t]+1;
}else{
obj[t] = 1;
}
}
return obj;
}
console.log(f(a));