首頁 >web前端 >js教程 >js中對數組進行操作的方法總結(程式碼)

js中對數組進行操作的方法總結(程式碼)

不言
不言原創
2018-08-23 15:16:211760瀏覽

這篇文章帶給大家的內容是關於js中對陣列進行操作的方法總結(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

1.找出元素item 在給定數組arr 中的位置

function indexOf(arr, item) {
  if (Array.prototype.indexOf){ //判断原型中是否支持该方法
      return arr.indexOf(item);
  } else {      
  for (var i = 0; i < arr.length; i++){          
  if (arr[i] === item){              
  return i;
          }
      }
  }     
  return -1;
}

2.計算給定數組arr 中所有元素的總和

//forEach遍历:
function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {
        s += val;
    }, 0);    
    return s;
};
//eval:
function sum(arr) {
    return eval(arr.join("+"));
};

3.移除陣列arr 中的所有值與item 相等的元素。不要直接修改陣列arr,結果傳回新的陣列

//splice()
function remove(arr,item){
    var newarr = arr.slice(0);    
    for(var i=0;i<newarr.length;i++){        
    if(newarr[i] == item){
            newarr.splice(i,1);
            i--;
        }
    }    
    return newarr;
}//push()
function remove(arr,item){
    var newarr = [];    
    for(var i=0;i<arr.length;i++){        
    if(arr[i] != item){
            newarr.push(arr[i]);
        }
    }    
    return newarr;
}//Array.prototype.filter()
function remove(arr,item){
    return arr.filter(function(ele){
         return ele != item;
    })
}

4.移除陣列arr 中的所有值與item 相等的元素,直接在給定的arr 陣列上進行操作,並將結果傳回

//splice
function removeWithoutCopy(arr, item) {
    for(var i=0; i<arr.length; i++)
    {        
    if(item == arr[i])
        {
            arr.splice(i,1);
            i--;
        }
    }    
    return arr;
}//while
function removeWithoutCopy(arr, item) {
    for(var i in arr){        
    while(arr[i]==item){
            arr.splice(i,1);
        }
    }    
    return arr;
}

5.在陣列arr 結尾加入元素item。不要直接修改陣列 arr,結果傳回新的陣列

//普通的迭代拷贝
var append = function(arr, item) {
    var length = arr.length,
        newArr = [];    
        for (var i = 0; i < length; i++) {
        newArr.push(arr[i]);
    }

    newArr.push(item);    
    return newArr;
};//使用slice浅拷贝+push组合
function append(arr, item) {
    var newArr=arr.slice(0);
    newArr.push(item);    
    return newArr;
}

6.刪除陣列 arr 最後一個元素。不要直接修改陣列 arr,結果傳回新的陣列

//利用slice
function truncate(arr) {
    return arr.slice(0,-1);
}
//利用filter
function truncate(arr) {
    return arr.filter(function(v,i,ar) {
        return i!==ar.length-1;
    });
}
//利用push.apply+pop
function truncate(arr) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.pop();    return newArr;
}
//利用join+split+pop    注意!!!:数据类型会变成字符型
function truncate(arr) {
    var newArr = arr.join().split(&#39;,&#39;);
    newArr.pop();    
    return newArr;
}

7.在陣列 arr 開頭新增元素 item。不要直接修改陣列 arr,結果傳回新的陣列

//利用concat
function prepend(arr, item) {
    return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
    var newArr=[item];
    [].push.apply(newArr, arr);    
    return newArr;
}
//利用slice+unshift/splice
function prepend(arr, item) {
    var newArr=arr.slice(0);
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}

8.刪除陣列 arr 第一個元素。不要直接修改陣列 arr,結果傳回新的陣列

//利用slice
function curtail(arr) {
    return arr.slice(1);
}
//利用filter
function curtail(arr) {
    return arr.filter(function(v,i) {
        return i!==0;
    });
}
//利用push.apply+shift
function curtail(arr) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.shift();    
    return newArr;
}

9.合併陣列 arr1 和陣列 arr2。不要直接修改陣列 arr,結果傳回新的陣列

//利用concat
function concat(arr1, arr2) {
    return arr1.concat(arr2);
}
//利用slice+push.apply
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);
    [].push.apply(newArr, arr2);    
    return newArr;
}
//利用slice+push
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);    
    for(var i=0;i<arr2.length;i++){
        newArr.push(arr2[i]);
    }    
    return newArr;
}

10.在陣列 arr 的 index 處新增元素 item。不要直接修改陣列arr,結果回傳新的陣列

//利用slice+splicefunction insert(arr, item, index) {
    var newArr=arr.slice(0);
    newArr.splice(index,0,item);    return newArr;
}//利用push.apply+splicefunction insert(arr, item, index) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.splice(index,0,item);    return newArr;
}

11.統計數組arr 中值等於item 的元素出現的次數

//filter()-->利用指定的函数确定是否在返回的数组中包含某一项
        function count(arr, item) {
            var count = arr.filter(function(a) {
                return a === item;   //返回true的项组成的数组
            });            
            return count.length;
        }  
        //map()-->对数组中的每一项进行给定函数,
  //返回每次函数条用的结果组成的数组;
        function count(arr, item) {
            var count = 0;
            arr.map(function(a) {
                if(a === item) {
                    count++;
                }
            });            
            return count;
        }//forEach()-->对数组中的每一项运行传入的函数
        function count(arr, item) {
            var count = 0;
            arr.forEach(function(a) {
                a === item ? count++ : 0;
            });            
            return count;
        }

12.找出數組arr 中重複出現過的元素

//两次遍历
function duplicates(arr) {
     //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
     var a = [],b = [];     
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){         
     if(!b[arr[i]]){
             b[arr[i]] = 1;             
             continue;
         }
         b[arr[i]]++;
     }     
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){         
     if(b[i] > 1){
             a.push(i);
         }
     }     
     return a;
 }
 //先排序,如果后一个与前一个相等且未保存,则保存。
 function duplicates(arr) {
    var a=arr.sort(),b=[];    
    for(var i in a){        
    if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }    
    return b;
}
//先排序然后再判断function duplicates(arr) {
    var new_arr = arr.sort();//先把arr排序
    var res = [] ;//目标容器
    for( var i = 0 ; i < new_arr.length ; i++){        
    if(new_arr[i] == new_arr[i+1] &&
        new_arr[i] !=new_arr[i-1]){//判断是否重复,是否已经放入容器
            res.push(new_arr[i]);
        }
    }
    return res;

13.為數組arr 中的每個元素求二次方。不要直接修改陣列arr,結果傳回新的陣列

function square(arr) {
   //声明一个新的数组存放结果
     var a = [];
     arr.forEach(function(e){
         //将arr中的每一个元素求平方后,加入到a数组中
         a.push(e*e);
     });     
     return a;
 }
 // 使用map
  function square(arr) {
      return arr.map(function(e) {
          return e * e;
      })
  }  
  // ES6箭头函数版
  const square = arr => arr.map(e => e * e);

14.在陣列arr 中,找出值與item 相等的元素出現的所有位置

//forEach
function findAllOccurrences(arr, target) {
    var a=[];
    arr.forEach(function(e,index){
        if(e==target)
            a.push(index);
    })    
    return a;
}
function findAllOccurrences(arr, target) {
var temp = [];
    arr.forEach(function(val,index){
        val !== target ||  temp.push(index);
    });    
    return temp;
}//filter
function findAllOccurrences(arr, target) {
    var result=[];
    arr.filter(function(item,index){
        return item===target&&result.push(index);
    });    
    return result;
}

相關推薦:

js陣列操作方法總結(必看篇)

#說明Js陣列操作基本方法

以上是js中對數組進行操作的方法總結(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn