最详细的javascript数组操作,你值得拥有

javaScript数组对象常用的方法:

1. 数组

  • push方法
  • concat方法
  • pop方法
  • splice方法
  • slice方法
  • reverse方法
  • join方法
  • shift方法
  • unshift方法
  • sort方法
  • indexOf方法和lastIndexOf 方法
  • forEach方法
  • map方法
  • filter方法
  • every方法
  • some方法
  • reduce和reduceRight 方法

一、push()和pop()

  • push():可以接收任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度
  • pop():删除数组末尾最后一项,返回移除的项
   var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
   var length = arr.push("jiuqi");
   console.log(length); // 5
   console.log(arr) //['zhansan', 'lisi', 'wangwu', 'lius', 'jiuqi'];

   var de = arr.pop();
   console.log(de) // jiuqi
   console.log(arr) //['zhansan', 'lisi', 'wangwu', 'lius'];

二、shift和unshift

  • shifit():删除原数组的第一项,并返回删除元素的值,如果数组为空的话,那么返回的就是undefined
  • unshift:将参数添加到原数组开头,返回的是数组的长度
// shift
	var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
    var length = arr.shift();
    console.log(length); // zhansan
    console.log(arr) // ["lisi", "wangwu", "lius"]
// unshift
	var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
	var de = arr.unshift('tian');
    console.log(de) // 5
    console.log(arr) //["tian", "zhansan", "lisi", "wangwu", "lius"]

三、join()和sort()

  • join():将数组转换成字符串,该方法只接收一个参数:即分隔符
  • sort():按升序排列数组项——即最小的值位于最前面,最大的值排在最后面,在排序时,它调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值, sort()方法比较的也是字符串
// join
   var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
   var length = arr.join();
   console.log(length); // zhansan,lisi,wangwu,lius
   console.log(arr.join('-')) // zhansan-lisi-wangwu-lius
   console.log(arr) // ["zhansan", "lisi", "wangwu", "lius"]
// sort
   var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
   var de = arr.sort();
   console.log(de) // ["lisi", "lius", "wangwu", "zhansan"]
   var arr2 = [11, 23, 45, 3];
   console.log(arr2.sort()) //[11, 23, 3, 45]
   console.log(arr) //["lisi", "lius", "wangwu", "zhansan"]

为了解决sort的问题,我们可以让sort接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面,比较函数接收两个参数,如果第一个参数大于第二参数则返回整数,两个参数相等返回零

	var arr2 = [23, 4, 42, 3, 34]
    // console.log(arr2.sort()) // [23, 3, 34, 4, 42]
    function compareTwo(value1, value2) {
      if (value1 > value2) {
        return 1;
      } else if (value1 < value2) {
        return -1;
      } else {
        return 0;
      }
    }
    console.log(arr2.sort(compareTwo)); // [3, 4, 23, 34, 42]

四、reverse()

  • reverse():反转数组顺序
   var arr2 = [23, 4, 42, 3, 34]
   console.log(arr2.reverse()) // [34, 3, 42, 4, 23]
   console.log(arr2); //[34, 3, 42, 4, 23]

五、concat()

  • concat():将参数添加到元数组中,同时可以连接两个数组,原数组不发生改变
   var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
   var arr2 = [23, 4, 42, 3, 34]
   var arr3 = arr2.concat(arr)
   console.log(arr3) //[23, 4, 42, 3, 34, "zhansan", "lisi", "wangwu", "lius"]

六、slice()

  • slice(start, end);
  • 第一个参数是必须的,表示从何处开始选取,如果是负数,那么它规定从数组尾部开始算起的位置,也就是说:-1代表最后一个元素,-2代表倒数第二个元素,以此类推
  • 第二个参数是可选的,规定从何处结束选取,该参数是数组片端结束的数组的下标,如果没用第二个参数,哪儿买就是从选取的start到结束,如果这个参数为负数,那么它规定的是从数组尾部开始算起的元素:
 // 如果当start为 0 的时候,它就是从下标 0 开始,依次截取后面的
   var arr2 = [23, 4, 42, 3, 34]
   var arr3 = arr2.slice(0)
   console.log(arr3); //[23, 4, 42, 3, 34]
   
   // 如果start 为负数的时候
   var arr4 = arr2.slice(-1);
   console.log(arr4); // [34]
  
  // 如果当start为正数,end也为正数的时候
   var arr2 = [23, 4, 42, 3, 34]
   // 截取下标从0开始,到 2 结束,不包含 2
   var arr3 = arr2.slice(0,2)
   console.log(arr3); //[23, 4]
     // 截取下标从1开始,到 2 结束,不包含 2
   var arr4 = arr2.slice(1,2)
   console.log(arr4); //[4]
   
  // 如果当start为负数,end也为正数的时候
   var arr2 = [23, 4, 42, 3, 34]
  // start为倒数第二个,结束到 34,但是不包含34,所以截取的是 3
   var arr3 = arr2.slice(-2,4)
   console.log(arr3); //[3]
   // start为倒数第二个,结束包含34
   var arr4 = arr2.slice(-2,5)
   console.log(arr4); //[3, 34]
   
 // 如果start为正数,当end为负数的时候
   var arr2 = [23, 4, 42, 3, 34]
   var arr3 = arr2.slice(2,-1) 
   console.log(arr3); //[42, 3]

七、splice()

  • splice():很强大的数组方法,它有很多种用法,可以实现删除、插入和替换
  • 插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
  • 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
  • 删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项
// 删除 -- 返回删除的元素 --原数组发生改变
    var arr2 = [23, 4, 42, 3, 34];
    var arr3 = arr2.splice(2,1); 
    console.log(arr3); //[42]
    console.log(arr2); // [23, 4, 3, 34]
// 替换 -- 
	var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
    var arr2 = [23, 4, 42, 3, 34]
    var arr3 = arr2.splice(2,1,4,34) 
    console.log(arr3); //[42]
    console.log(arr2) // [23, 4, 4, 34, 3, 34]
 // 插入 --
 	var arr2 = [23, 4, 42, 3, 34]
    var arr3 = arr2.splice(2,0,4,34) 
    console.log(arr3); //[]
    console.log(arr2) // [23, 4, 4, 34, 42, 3, 34]

八、indexOf和lastIndexOf

  • indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。
  • lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。
     var arr = [1,3,5,7,7,5,3,1];
     console.log(arr.indexOf(5)); //2 -- 找到第一个就不会往下找,返回下标
     console.log(arr.lastIndexOf(5)); //5
	 console.log(arr.indexOf(5,2)); //2
	 console.log(arr.lastIndexOf(5,4)); //2
	 console.log(arr.indexOf("5")); //-1

九、forEach

  • forEach():对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身
   var arr2 = [23, 4, 42, 3, 34]
   arr2.forEach((item, index, a) => {
   // item表示每个元素,index表示下标,a表示元数组
     console.log(item) // 23 , 4 42 3 34
     console.log(index) // 0 1 2 3 4
     console.log(a) //[23, 4, 42, 3, 34]
   })

十、map()

  • array.map(function(currentValue,index,arr), thisValue)
  • currentValue:必须。当前元素的值
  • index:可选。当前元素的索引值
  • arr:可选。当前元素属于的数组对象
  • thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。可改变this指向,
  • map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

注意:map() 不会改变原始数组。map() 不会对空数组进行检测

var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25]

十一、every和some

  • come():判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true
  • every():判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
  // every
  
   var arr = [1, 2, 3, 4, 5];
   var arr2 = arr.every(function(x) {
   return x < 10;
   }); 
   console.log(arr2); //true
   var arr3 = arr.every(function(x) {
   return x < 3;
   }); 
   console.log(arr3); // false
   
// some

   var arr = [1, 2, 3, 4, 5];
   var arr2 = arr.some(function(x) {
   return x < 3;
   }); 
   console.log(arr2); //true
   var arr3 = arr.some(function(x) {
   return x < 1;
   }); 
   console.log(arr3); // false

十二、filter

  • 该回调函数接受三个参数
  • 第一个表示arr的某个元素。
  • 第二个表示arr每一位的下标
  • 第三个表示arr自身 常用 self表示
// 在一个数组中,删除偶数
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
	return x % 2 !== 0; 
});
console.log(r); // [1, 5, 9, 15]
// 删除数组中的空字符串
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
	return s && s.trim(); // 注:IE9(不包含IE9)以下的版本没有trim()方法
});
arr; // ['A', 'B', 'C']

// 数组去重
var arr = [7,6,5,214,5,9,7,80,3,6,45,48,46,24,26];
var a = arr.filter(function(x,item,arr){
    return arr.indexOf(x) ===item;
})
console.log(a.toString())

十三、reduce()和reduceRight()

  • 这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
  • 这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值
  • 传给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10);
console.log(sum); //25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值