Array数组方法系列

此文章将会是常用方法总结,就不区分是否是ES6的啦,有些真是作者本人真不常用,就不展示了

如有小伙伴想补充,可以联系作者哦~~

本文章方法分为两类哦~

数组的常用情景-CSDN博客

原数组改变

push

push() 向一个数组后面添加项数

返回值:返回添加后的数组长度, 会改变原来数组

let arr1 = ['a', 'b', 'c'];
console.log(arr1);               //输出 ['a', 'b', 'c']
console.log(arr1.push('z'));     //输出 4
console.log(arr1);               //输出 ['a', 'b', 'c', 'z']

 unshift

unshift() 向数组的最前面添加

返回值:返回新的数组长度, 会改变原数组

let arr1 = ['a', 'b'];
console.log(arr1);                   //输出 ['a', 'b']
console.log(arr1.unshift('x', 'z')); //输出 4
console.log(arr1);                   //输出 ['x', 'z', 'a', 'b']

pop

pop() 移除数组的最后一项

let arr = ['a', 'b', 'c'];
console.log(arr);                //输出 ['a', 'b', 'c']
console.log(arr.pop());          //输出 c
console.log(arr);                //输出 ['a', 'b']

shift

shift() 删除数组中的第一项

返回值:返回删除的项 会改变原数组

 let arr = ['a', 'b'];
 console.log(arr);                    //输出 ['a', 'b']
 console.log(arr.shift());            //输出 a
 console.log(arr);                    //输出 ['b']

reverse

数组反转  返回值:返回新数组,会改变原数组

 let arr = [1, 3, 5, 3, 2, 4];
 console.log(arr);                //输出 [1, 3, 5, 3, 2, 4]
 console.log(arr.reverse());      //输出 [4, 2, 3, 5, 3, 1]
 console.log(arr);                //输出 [4, 2, 3, 5, 3, 1]

sort

直接排序数字出错原因:

因为它采用的unicode (采用双字节对字符进行编码;统一的字符编码标准) 编码导致的

数字排序

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});//1,5,10,25,40,100   升序
points.sort(function(a,b){return b-a});//100,40,25,10,5,1  降序

简写
points.sort((a,b)=> a-b);//1,5,10,25,40,100   升序
points.sort((a,b)=> b-a);//100,40,25,10,5,1  降序

数组对象排序

var points = [
    {value:10},
    {value:8},
    {value:4},
    {value:9},
    {value:1},
    {value:18},
];
points.sort((a,b)=> {a.value-b.value});//1,5,10,25,40,100   升序
points.sort((a,b)=> {b.value-a.value});//100,40,25,10,5,1  降序

字母排序

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); //Apple,Banana,Mango,Orange  升序排列数组

splice 截取/添加/删除

参数1:开始删除的位置即下标

参数2:可选 删除元素个数长度。若不传则默认删除到最后

参数3,4,5…: 添加的项数

返回值:返回修改后的数组,会改变原数组

 let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
 console.log(arr);                            //输出 ['a', 'b', 'c', 'd', 'e', 'f']
 console.log(arr.splice(2, 3));               //输出 ['c', 'd', 'e']
 console.log(arr);                            //输出 ['a', 'b', 'f']
 let arr1 = ['a', 'b', 'c', 'd', 'e', 'f'];
 console.log(arr1);                           //输出 ['a', 'b', 'c', 'd', 'e', 'f']
 console.log(arr1.splice(2, 2, 'xx', 'aa'));  //输出 ['c', 'd']
 console.log(arr1);                           //输出 ['a', 'b', 'xx', 'aa', 'e', 'f']

copyWithin()

将数组中指定的成员项,复制到其他位置(会覆盖原来的成员),返回新数组会改变原数组。

Array.prototype.copyWithin(target, start = 0, end = this.length)

参数1:指定从那个位置开始替换数据

参数2:可选,默认从0开始复制。若传入则从指定位置为复制的数据,若为负数则从尾部数

参数3:可选,默认复制到最后。若传入则从指定位置结果复制的数据,若为负数则从尾部数

 let arr = [1, 2, 3, 4, 5, 6];
 let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 let arr2 = [1, 2, 3, 4, 5, 6, 7, 8];
 let arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 let arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 let arr5 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
 console.log(arr.copyWithin(4));                    
//输出 [1, 2, 3, 4, 1, 2]
 console.log(arr);                                  
//输出 [1, 2, 3, 4, 1, 2]
 console.log(arr1.copyWithin(2));                   
//输出 [1, 2, 1, 2, 3, 4, 5, 6, 7, 8]
 console.log(arr1);                                 
//输出 [1, 2, 1, 2, 3, 4, 5, 6, 7, 8]
 console.log(arr2.copyWithin(3, 4));                
//输出 [1, 2, 3, 5, 6, 7, 8, 8]
 console.log(arr3.copyWithin(3, 4, 6));             
//输出 [1, 2, 3, 5, 6, 6, 7, 8, 9, 10]
 console.log(arr5.copyWithin(3, -7, -5));           
//输出 [1, 2, 3, 5, 6, 6, 7, 8, 9, 10, 11]

原数组不改变

数组长度 length

 let arr = ['a', 'b', 'c', 'd'];
 console.log(arr.length);//输出4

转换字符串

join()

以指定的字符将数组连接起来,变成字符串

通常和String中的split连用,splint 是以指定字符分割成数组

参数:指定的字符, 如果未传参则是以逗号(,)分割

 let arr = ['a', 'b', 'c', 'd'];
 console.log(arr.join('1'));        //输出 a1b1c1d
 console.log(arr.join());           //输出 a,b,c,d
 console.log(arr.join(''));         //输出 abcd

toString()

var test = [1,2,3,4];
test.String()     //1,2,3,4

toLocaleString() 

设置格式化字符串

var test = [1,2,3,4];
test.toLocaleString()
// 1,2,3,4

array.toLocaleString(locales, options)

toLocaleString() 方法返回数字时间在特定语言环境下的表示字符串。

新的 locales 和 options 参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。在旧的实现中,会忽略 locales 和 options 参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。

 

​​​​​​时间Date()

数字Number

join()与toString()的区别

  • 如果join()函数内部参数为空,则join()等价于toString()
  • 如果join(’,’)函数内部参数为逗号字符,则表示用逗号分割数组
  • 如果join(‘巴拉巴拉’),则表示用‘巴拉巴拉’分割数组。
var test = [1,2,3,4];
var x=document.getElementById("demo");
x.innerHTML=  test.toString()+":"+test.join()+"<br>"
               +test.toString()+":"+test.join(',')+"<br>"
               +test.toString()+":"+test.join('巴拉巴拉')+"<br>"
               +test.toString()+":"+test.join('')+"<br>";

截取数组 slice

按传入的下标截取数组

参数1:开始截取的位置即下标

参数2:可选 若不传则默认截取到末尾。若传入则截取到该下标的前一位,不包括当前下标的一位。

返回值:返回按指定下标截取后的数组(前包后不包),不会影响原数组 (若想删除一个数组中的某几项则用splice())

若传入负数则从数组的末尾往前数

 let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
 console.log(arr);                    //输出 ['a', 'b', 'c', 'd', 'e', 'f']
 console.log(arr.slice(1, 3));        //输出 ['b', 'c']
 console.log(arr.slice(1));           //输出 ['b', 'c', 'd', 'e', 'f']
 console.log(arr.slice(-3));          //输出 ['d', 'e', 'f']
 console.log(arr.slice(-3, -1));      //输出 ['d', 'e']

concat

两个数组连接

返回值:返回新数组,不会改变原数组

let arr = ['a', 'b'];
let arr1 = ['x', 'z'];
console.log(arr.concat(arr1));        //输出 ['a', 'b', 'x', 'z']
console.log(arr);                     //输出 ['a', 'b']
console.log(arr1);                    //输出 ['x', 'z']

查值系列

indexOf()

查找一个数组(从首位开始查询)中是否存在某个值,若存在返回当前的下标(只能匹配第一次出现),否则返回-1

参数1:要查找的某个值

参数2:可选 传入指定的下标,指定从哪个位置开始查询

 let arr = ['a', 'b', 'c', 'd', 'b', 'e'];
 console.log(arr);                    //输出 ['a', 'b', 'c', 'd', 'b', 'e']
 console.log(arr.indexOf('b'));       //输出 1
 console.log(arr.indexOf('f'));       //输出 -1
 console.log(arr.indexOf('d', 2));    //输出 3

lastIndexOf()

lastIndexOf() 查找一个数组(从末尾开始倒着查询)中是否存在某个值(最后出现的值),若存在返回当前的下标(只能匹配第一次出现),否则返回-1

参数1:要查找的某个值

参数2:可选 传入指定的下标,指定从哪个位置之前查询

let arr1 = ['a', 'b', 'c', 'd', 'b', 'e'];
console.log(arr1);                            
//输出 ['a', 'b', 'c', 'd', 'b', 'e']
console.log(arr1.lastIndexOf('b'));           
//输出 4
console.log(arr1.lastIndexOf('f'));           
//输出 -1
console.log(arr1.lastIndexOf('d', 3)); 
// 这里就是从数组['a', 'b', 'c', 'd'] 查询是否有'd'        //输出 3

at()

指定下标

var arr1 = [100, 200, 300, 400, 500];
arr1.at(1);//200   数字代表获取下标的
arr1.at(-1);//500   数字代表获取下标的

检测数组

every() 每一项是否都满足

检测数组的每一项是否都符合条件,符合返回true,若有一项不符合则停止检测返回false

参数:函数,有三个参数分别为,当前的项,当前项的下标,检测的数组

 let arr = [1, 2, 3, 4, 5];
 let arr1 = arr.every((item, x, y) => {
    console.log(item, x, y)
    return item >= 1
 })
 //输出内部
 1 0 (5) [1, 2, 3, 4, 5]
 2 1 (5) [1, 2, 3, 4, 5]
 3 2 (5) [1, 2, 3, 4, 5]
 4 3 (5) [1, 2, 3, 4, 5]
 5 4 (5) [1, 2, 3, 4, 5]

 console.log(arr1); //true  意思是都满足

some() 是否有满足的

检测数组中是否存在符合指定的条件,若有符合条件的则停止检测返回true,否则false

参数:函数, 有三个参数分别为,当前的项,当前项的下标,检测的数组

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.some((x, y, z) => {
    return x > 2
 })
 console.log(arr2);//true
 // 如果 x>5  返回false

filter() 过滤

检测数组,返回符合条件的内容, 没有符合的则返回空数组

参数:函数, 有三个参数分别为,当前的项,当前项的下标,检测的数组

let arr = [1, 2, 3, 4, 5];
let arr1 = arr.filter((x, y, z) => {
   console.log(x, y, z);
   return x > 2
})
console.log(arr1);
//[3, 4, 5]

includes()

检测数组是否存在某个值,存在为true,否则为false

  • 参数1:传入的指定值
  • 参数2:可选,表示搜索的起始位置,默认为0。若为负数,则从数组倒着查询
    • 注意:
    • 如果传入的值为整数,其长度大于数组长度则返回false
    • 如果传入的值为负数,其长度大于数组长度则重置从0开始查询
 // 常规写法
if (num == 1 || num == 2 || num == 3) {
    console.log("yes");    
}
// 简洁写法
if ([1, 2, 3].includes(num)) {
    console.log("yes");
}

 let arr = ['x', 'b', 'a', 'c', 'd', 'e'];
 console.log(arr.includes('b'));                //true
 console.log(arr.includes('z'));                //false
 console.log(arr.includes('a', 1));             //true
 console.log(arr.includes('a', 3));             //false
 console.log(arr.includes('e', -2)); // 这里其实是从['d', 'e']中查询值'e'是否存在  //true
 console.log(arr.includes('e', 10));            //false

find()

找出第一个符合条件的成员

参数是一个回调函数,依次查询每一项,直到查询到第一个符合条件的成员,并返回该项的值,若不存在则返回undefined

有三个参数分别为,当前的项,当前项的下标,检测的数组

 let arr = [1, 2, 3, 4, 5, 6];
 let arr1 = arr.find((item, index, arr) => {
    console.log(item, index, arr)
    return item > 3
 })
 console.log(arr1);  //输出  4 

findIndex()

返回的是符合条件的位置,而find()是返回符合条件的项,如果所有成员都不满足则返回-1

let arr2 = [1, 2, 3, 1, 3, 5, 4, 5, 6];
 let arr3 = arr2.findIndex((item, index, arr) => {
     return item > 3
 })
 console.log(arr3);
 //输出 5   下标

转为数组

Array.of()

将一组值转为数组

如果没有传入参数则返回一个空数组[]

其实Array.of()可以代替Array()和new Array() 去创建和声明一个新数组

console.log(Array.of());                            //输出 []
 console.log(Array.of('a'));                         //输出 ['a']
 console.log(Array.of(1, 'a', 3, 'ab'));             //输出 [1, 'a', 3, 'ab']
 console.log(Array.of(1, [1, 'a'], 3, 'ab'));        //输出 [1, Array(2), 3, 'ab']
 console.log(Array.of(1, 2, 3, 4, 5));               //输出 [1, 2, 3, 4, 5]

Array.from()

将一个类数组对象或者可遍历对象转换成一个真正的数组

所谓类数组对象,最基本的要求就是具有length属性的对象。

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES6 的写法
let arr2 = Array.from(arrayLike); 
// ['a', 'b', 'c']

将Set结构的数据转换为真正的数组:
let arr = [12,45,97,9797,564,134,45642]
let set = new Set(arr)
console.log(Array.from(set))  
// [ 12, 45, 97, 9797, 564, 134, 45642 ]

Array.from还可以接受第二个参数
作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
如下:
let arr = [12,45,97,9797,564,134,45642]
let set = new Set(arr)
console.log(Array.from(set, item => item + 1)) 
// [ 13, 46, 98, 9798, 565, 135, 45643 ]

将字符串转换为数组
let  str = 'hello world!';
console.log(Array.from(str)) 
// ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

Array.from参数是一个真正的数组
console.log(Array.from([12,45,47,56,213,4654,154]))
//像这种情况,Array.from会返回一个一模一样的新数组。

fill()

fill() 方法用静态值填充数组中的指定元素。

您可以指定开始和结束填充的位置。如果未指定,则将填充所有元素。

注释:fill() 会覆盖原始数组。

array.fill(value, start, end)
//value  必需。用于填充数组的值。
//start  可选。开始填充数组的索引(默认为 0)。
//end    可选。停止填充数组的索引(默认为 array.length)。
复制20遍相同数组
Array(20).fill(item)
  
let arr = ['a', 'b', 'c'];
console.log(arr.fill(1));                //输出
[1,1,1]
let arr1 = ['a', 'b', 'c', 'd', 'e'];
console.log(arr1.fill(2, 2, 4));         //输出 ['a','b','2','2','e']

new Set()

let s1 = new Set(["大哥","二哥","三哥","四哥","三哥"]);
console.log(s1);//去重  Set(4) {'大哥', '二哥', '三哥', '四哥'}
let s2= [...s1]
console.log(s2);//去重  ['大哥', '二哥', '三哥', '四哥']

方法-常用

add()、delete()、size、 clear()、has(value)

遍历

键名遍历 

keys()
 let arr = ['a', 'b', 'c', 'd', 'e'];
 for(let i of arr.keys()){
    console.log(i)
 }
 输出
 0
 1
 2
 3
 4
for in
 let arr = ['a', 'b', 'c', 'd', 'e'];
 for(let i in arr){
    console.log(i)
 }
 输出
 0
 1
 2
 3
 4

键值遍历

values()
 let arr = ['a', 'b', 'c', 'd', 'e'];
 for(let i of arr.values()){
    console.log(i)
 }
 输出
 a
 b
 c
 d
 e
for of 无法遍历对象
 for(let i of arr){
    console.log(i)
 }
 输出
 a
 b
 c
 d
 e

键值对的遍历

entries()
 let arr = ['a', 'b', 'c', 'd', 'e'];
 for(let i of arr.entries()){
    console.log(i)
 }
 输出
 [0, 'a']
 [1, 'b']
 [2, 'c']
 [3, 'd']
 [4, 'e']

数据遍历

1. forEach()

forEach:(可以三个参数,第一个是value,第二个是index,第三个是数组体)

var arr1 = [100, 200, 300, 400, 500];
arr1.forEach(function(item, index){
    console.log(item, index);
});
2.map()
 let arr = [1, 2, 3, 4, 5];
 arr.map((item, index) => {
    console.log(item, index);
 })
3. for循环
for (let i = 0; i < arr.length; i++) {
    console.log('for===', arr[i])
}

数组判断

Array.isArray(obj)
obj必需,要判断的对象。

*扩展运算符

let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
...arr1 输出0,1,2
arr1.push(...arr2);

多维数组的转换

flat()

数组的成员有时还是数组, Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。

flat ( num ) num默认为1 数字为要拉平的嵌套数量

[1, 2, [3, 4]].flat()      //输出 [1, 2, 3, 4]

[1, 2, [3, [4, 5]]].flat()    // [1, 2, 3, [4, 5]]

[1, 2, [3, [4, 5]]].flat(2)    // [1, 2, 3, 4, 5]

原数组有空位, flat() 方法会跳过空位。
[1, 2, , 4, 5].flat()             // [1, 2, 4, 5]

flatMap

flatMap()方法对原数组的每个成员执行一个函数(相当于执行 Array.prototype.map() ),然后对返回值组成的数组执行 flat() 方法。该方法返回一个新数组,不改变原数组。

只能展开一层数组。

// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]


flatMap() 只能展开一层数组。
// 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()
[1, 2, 3, 4].flatMap(x => [[x * 2]])// [[2], [4], [6], [8]]
上面代码中,遍历函数返回的是一个双层的数组,但是默认只能展开一层,因此 flatMap() 返回的还是一个嵌套数组。
flatMap() 方法的参数是一个遍历函数,该函数可以接受三个参数,分别是当前数组成员、当前数组成员的位置(从零开始)、原数组。

arr.flatMap(function callback(currentValue[, index[, array]]) {  // ...}[, thisArg])
flatMap() 方法还可以有第二个参数,用来绑定遍历函数里面的 this 。

Array()

Array(3) // [, , ,]

reduce

小伙伴们有更好的可以评论添加哦~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值