JavaScript中数组的常用方法

join(): 将数组每个元素组起一个字符串,用一个字符隔开每个元素,返回一个新的字符串。(不改变原数组)

let arrJoin = [2, 3, 5, 6] 
console.log(arrJoin.join('.')); //2.3.5.6 
console.log(arrJoin); //[ 2, 3, 5, 6 ]
功能:实现重复字符串

返回一个新创建的空数组,长度为重复字符串次数+1(因为要在两个数组元素之间插入字符串)并使用join函数插入字符串。

function repeatString(str, n) {
  return new Array(n + 1).join(str);
}
console.log(repeatString("abc", 3)); // abcabcabc
console.log(repeatString("Hi", 5)); // HiHiHiHiHi

push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。 (改变原数组)

pop():不传参,数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项。(改变原数组)

let arrPP = [1, 2, 3, 4]
console.log(arrPP.push('a', 'h')); //5
console.log(arrPP); //Array(6) [ 1, 2, 3, 4, "a", "h" ]
console.log(arrPP.pop()); // h
console.log(arrPP);  //[ 1, 2, 3, 4, "a" ]

shift():不传参,删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 。(改变原数组)

unshift():传参,将参数添加到原数组开头,并返回数组的长度 。(改变原数组)

let arrSU = [1, 2, 3, 4]
console.log(arrSU.unshift('a', 'h')); //6 即数组长度
console.log(arrSU); // [ "a", "h", 1, 2, 3, 4 ] !!!!注意位置
console.log(arrSU.shift()); // a

sort :排序,排序时,sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。返回的是排序后的数组,同时原数组也排序。(改变原数组)

注意:即使数组中的每一项都是数值, sort()方法比较的也是字符串,!!按照首字母顺序,大写优先

let arrSort = [22, 3, 55, 6]
console.log(arrSort.sort()); // [ 22, 3, 55, 6 ] 
console.log(arrSort); // [ 22, 3, 55, 6 ]
let arrSort2 = ['ba', 'ffz', 'G', 'z', 'd'] 
console.log(arrSort2.sort()); //[ "G", "ba", "d", "ffz", "z" ] sort返回的是排序好的数组
console.log(arrSort2); //[ "G", "ba", "d", "ffz", "z" ]  原数组也排序好
sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。
按数字从小到大排序:

function compare(val1, val2) {
  if (val1 < val2) {
    return -1
  } else if (val1 ===   val2) {
    return 0
  } else {
    return 1
  }
}
console.log(arrSort.sort(compare)); //不用compare()因为不执行,只传函数本身  [ 3, 6, 22, 55 ]

reverse:反转数组,返回的是翻转后的数组,同时原数组也反转(改变原数组)

let arrR = [13, 24, 51, 3];
console.log(arrR.reverse()); //[3, 51, 24, 13]
console.log(arrR); //[3, 51, 24, 13](原数组改变

concat() :将参数添加到原数组的复制中,可传数组,且会自动分割数组元素,最后返回新的数组(不改变原数组)

这个方法会先创建当前数组一个复制,然后将接收到的参数添加到这个新数组的末尾,最后返回这个新的数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回。

let arrC = [11, 22, 33, 44]
console.log(arrC.concat([22, 88], 'gg')); //[ 11, 22, 33, 44, 22, 88, "gg" ] 返回新的数组
console.log(arrC); //[ 11, 22, 33, 44 ] 原数组不改变

slice 截取(也可以对字符串操作)

返回从原数组中指定开始下标到结束下标之间的项组成的新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。

let arrS1 = [1, 2, 3, 4, 5]
let aS1 = arrS1.slice(1) //在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。
console.log(aS1);
let aS2 = arrS1.slice(0, 4) //如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。**(左闭右开)**
console.log(aS2);
let aS3 = arrS1.slice(1, -2) //当出现负数时,将负数加上数组长度的值5来替换该位置的数
console.log(aS3);

splice 可以实现删除,插入,替换 ,返回的是一个新数组,是被删除后的数组,原数组是函数处理后的数组(改变原数组)

删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项
插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。

let arrSp = [1, 2, 3, 4]
let asp1 = arrSp.splice(0, 2)
console.log(arrSp); //原数组被改变 [3,4]
console.log(asp1); //被删除的数组[1,2]
let arrSp2 = [2, 3, 3, 3]
console.log(arrSp2);
console.log(arrSp2.splice(0, 1, 3)); // 替换
console.log(arrSp2);

indexOf,lastIndexOf 查找元素所在的数组下标索引,第二个参数可选,表示从哪开始查找(不改变原数组)

indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。
lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。

var arr = [1, 3, 5, 7, 7, 5, 3, 1];
console.log(arr.indexOf(5)); //2

forEach():对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。(不改变原数组)

参数是function类型,function中默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身。

let arrE = [55, 22, 99, 1, 2, 77]
let arrEnew = arrE.forEach((val, index, arr) => {
  if (val > 50) {
    console.log('>50 indx:' + index);
    let x = val++
    return x //不会改变原数组
  } else {
    console.log('<=50 is arr: ' + arr);
  }
})
console.log(arrE);
console.log(arrEnew); //undefined
let arrE2 = [{ //对对象操作就可以
    a: 0
  },
  {
    b: 1
  },
  {
    c: 2
  }
]
let arrE3 = arrE2.forEach((val) => {
  val.x = 'x'
})
console.log(arrE2);
console.log(arrE3); //undefined

map 指“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。(不改变原数组)

let arrMap = [1, 2, 3, 4]
let arrMapNew = arrMap.map((item) => {
  return item * item
})
console.log(arrMapNew); //[ 1, 4, 9, 16 ]

filter “过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。(不改变原数组)

必须要return一个判断条件

var arrFil = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function (x, index) {
  return index % 3  = = = 0 || x >= 8; //return的是条件
});
console.log(arr2); //[1, 4, 7, 8, 9, 10]

every 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。(不改变原数组)

var arrEve = [1, 2, 3, 4, 5];
let arrEve2 = arrEve.every((item) => {
  return item > 0
})
console.log(arrEve2);

some 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。(不改变原数组)

var arrSome = [1, 2, 3, 4, 5];
let arrSome2 = arrSome.some((item) => {
  return item > 4
})
console.log(arrSome2);

reduce,reduceRight(不改变原数组)

这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。
而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
第一个参数为函数:函数传4 个参数:前一个值、当前值、项的索引和数组对象,第二个参数是初始值

    var arrRe = [1,2,3,4,5]
    let sum = arrRe.reduce((pre,item) => {
      return pre+item
    },100)
    console.log(sum);// 100+1+2+3+4+5
	// 100是1作为item的pre

split 第一个参数:从指定字符串位置作为分割点,第二个参数可选:限制返回最大的数组长度

let str = "aa,bb.cc,ddd;;;"
let str1 = str.split(',')
let str2 = str.split(',',2)
console.log(str1); //[ "aa", "bb.cc", "ddd;;;" ]
console.log(str2); // [ "aa", "bb.cc"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webhyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值