JavaScript 数组Api总结

JavaScript Array

一、基础Api

1.concat()
方法用于合并两个或多个数组
不会改变现有数组,返回新的数组

var  arr = [1, 2, 4]; 
var arr2 = [3, 5, 7];
var arr3 = arr.concat('10', arr2)
console.log(arr3) // [1, 2, 4, "10", 3, 5, 7]

2.slice()
返回一个从开始到结束(不包括结束下标)选择的数组
不会改变现有数组,返回新的数组

var colors = ['red','green','blue','black','white'];
var colors2 = colors.slice(1)   //green,blue,black,white
var colors3 = colors.slice(1,4) //green,blue,black

3.splice()
始终会返回一个数组,包含从原始数组中删除的项,如果未更改,则返回空数组
①、删除 :需指定两个参数,要删除的第一项位置和要删除的项数
②、插入:需提供3个参数,起始位置,要删除的项数,要插入的项(多个项加,项,项,….)
③、替换:需提供3个参数,起始位置,要删除的项,要替换的项(删除项数==新增项数)
改变现有数组,返回新的数组

var colors = ['red','green','blue'];

var removed = colors.splice(0,1);
console.log(colors);      //["green", "blue"]
console.log(removed);     //["red"]

var removed = colors.splice(1,0,'black');
console.log(colors);     //["green", "black", "blue"]
console.log(removed);    // 返回空数组

var removed = colors.splice(0,2,'yellow','white');
console.log(colors);     //["yellow", "white", "blue"]
console.log(removed);    //["green", "black"]

4.join()
使用特定符号分割

var colors = ['red','green'];
var str = colors.join(.) // 'red.green'

5.push()
将传入值添加到数组的末尾,并返回长度
改变现有数组,返回新的数组长度

var arr = [1, 2, 4]; 
var key = arr.push(10)
console.log(arr) // [1, 2, 4, 10]
console.log(key) // 4

6.pop()
删除并返回原数组最后一项
改变现有数组,返回最后一项

var arr = [1, 2, 4]; 
var key = arr.pop()
console.log(arr) // [1, 2]
console.log(key) // 4

7.shift()
移除并返回原数组中第一项
改变现有数组,返回第一项

var arr = [1, 2, 4]; 
var key = arr.shift(10)
console.log(arr) // [2, 4]
console.log(key) // 1

8.unshift()
在原数组顶部添加项 并返回现数组长度
改变现有数组,返回现数组长度

var arr = [1, 2, 4]; 
var key = arr.unshift('xiaoming')
console.log(arr) // ["xiaoming", 1, 2, 4]
console.log(key) // 4

9.reverse()
反转原数组

var arr = [1, 2, 9, 4]; 
arr.reverse() // [4, 9, 2, 1]

10.toString()
将函数对象转换为字符串

var arr = [1, 2, 9, 4]; 
var str = arr.toString() // "1,2,9,4"

11.toLocaleString()
将函数对象转换为字符串

var person1 = {
    toString: function(){
        return 'pp';
    },
    toLocaleString:function(){
        return 'oo';
    }
}

var person2 = {
    toString: function(){
        return 'op';
    },
    toLocaleString:function(){
        return 'po';
    }
}
alert([person1,person2]);   //pp,op
alert([person1,person2].toString());    //pp,op
alert([person1,person2].toLocaleString());  //oo,po

12.sort(funciton)
将函数对象转换为字符串
funciton必须为一个函数
空||a-b升序 b-a降序

var arr = [1, 2, 9, 4]; 
var str = arr.sort() // 1,2,4,9

function order(a,b) {
	return b - a 
}
arr.sort(order)	 //9,4,2,1

二、查找Api

13.indexOf(item, start)
返回数组中某个指定的元素位置,没找到指定元素则返回 -1
item: 必须,查找的元素;
start: 可选,取值是 0 到 stringObject.length - 1

var arr = ["Banana", "Orange", "Apple", "Mango"]; 
var str = arr.indexOf("Apple"); // 2

14.lastIndexOf(item, start)
原理同indexOf,起始方向相反

15/16.find/findIndex((item, index,array), thisValue) es6
找到满足条件的第一个元素/元素下标返回,未找到则返回underfined/-1
item: 必须,当前元素;
index: 当前元素索引
array: 实参数组
thisValue: 可选, 传递给函数的值一般用 “this” 值。
如果这个参数为空, “undefined” 会传递给 “this” 值

var ages = [3, 10, 18, 20];
var age = ages.find((item,index,arr) => {
return item >= 18  //18

return item >= 30  //undefined
})

var ageIdnex = ages.findIndex((item,index,arr) => {
return item >= 18  //2

return item >= 30  //-1
})

三、迭代Api (不会改变原数组)

17.every(function((item,index,array), thisValue){…})
对数组中的每一项都运行给定的函数,每一项运行正确返回true,or >false
形参同上

var arr = [1,2,3,4,5]
var bool = new Boolean
bool = arr.every(function(item,index,array){
return item > 0  // true
})
bool = arr.every(function(item,index,array){
return item < 2  // false
})

18.filter(function((item,index,array), thisValue){…})
给原数组运行特定的函数,返回 判定为true 的项组成的新的数组
形参同上

var numbers=[1,2,3,4,5,4,3,1];
var filterResult = numbers.filter(function (item, index, array) {
return (item > 2); 
})
console.log(filterResult); //[3,4,5,4,3]

19.forEach(function((item,index,array), thisValue){…})
对数组中的每一项运行给定的函数。这个方法没有返回值
形参同上

var numbers=[1,2,3,4,5,4,3,1];
var sum = 0;
var forEachResult = numbers.forEach(function (item, index, array) {
array[index] == item; //true
sum += item;
})
console.log(sum)  //23

20.map(function((item,index,array), thisValue){…})
对数组每一项运行给定的函数,返回执行后结果组成的数组
形参同上

var numbers=[1,2,3,4,5,4,3,1];
var mapResult = numbers.map(function (item, index, array) {
return item * 2;
})
console.log(mapResult); //[2,4,6,8,10,8,6,2]

21.some(function((item,index,array), thisValue){…})
*对数组中的每一项运行给定的函数,如果该函数对任一项返回t则返回true
形参同上

var numbers=[1,2,3,4,5,4,3,1];
var someResult = numbers.some(function (item, index, array) {
return (item > 2);
})
console.log(someResult); //true

四、汇总Api

22/23.reduce/reduceRight(function((total, item, index, array), initialValue){…})
对数组每一项运行给定的函数,返回执行后结果组成的数组
total: 必须。初始值,或计算后的返回值
initialValue: 可选。传递给函数的初始值
item、index、array 同上

var arr = [1, 2, 3, 4, 5];
var sumReduce = arr.reduce(function (prev, item, index, array) {
//prev 为截至到当前元素之前的临时汇总值
return prev + item
});
console.log(sumReduce) //15

reduceRight() 累加方向相反

五、其他Api

24.keys() es6
从数组 fruit 创建一个数组迭代对象, 该对象包含了数组的键
一个新的 Array 迭代器对象 下标

var arr = ['a', 'b', 'c'];
var arr1 = array1.keys();

for (var key of arr1) {
  console.log(key); // 0  1  2
}
||
arr1.next() //{value: 0, done: false}
arr1.next() //{value: 1, done: false}
arr1.next() //{value: 2, done: false}
arr1.next() //{value: underfined, done: true}

25.entries() es6
返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)
与keys()用法相似 返回值

var a = ['a', 'b', 'c'];
var iterator = a.entries();

console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']
console.log(iterator.next().value); // [2, 'c’]
for of 循环
var a = ['a', 'b', 'c'];
var iterator = a.entries();

for (let e of iterator) {
  console.log(e);
}
// [0, 'a']
// [1, 'b']
// [2, 'c'] 

26.values() es6
返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)
与keys()用法相似 返回值

var a = ['a', 'b', 'c'];
var iterator = a.values();

console.log(iterator.next()); // {value: "a", done: false}
console.log(iterator.next()); // {value: "b", done: false}
console.log(iterator.next()); // {value: "c", done: false}
for of 循环
var a = ['a', 'b', 'c'];
var iterator = a.values();

for (let e of iterator) {
  console.log(e);
}
// a
// b
// c

27.copyWithin(target, start, end) es6
方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中
target:必填, 复制到指定的目标索引位置
start: 复制到指定的目标索引位置(不包含所指)
target: 复制到指定的目标索引位置(不包含所指)

[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]//

28.fill(value, start, end) es6
方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中
target: 必填,填充值
start:可选, 填充起始位置
end: 填充结束位置 默认最后,实际end-1


var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr1.fill(7)
// 7,7,7,7,7,7,7,7,7,7,7

var arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr4.fill(7, 2)
// 1,2,7,7,7,7,7,7,7,7,7

var arr6 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr6.fill(7, 2, 5)
//1, 2, 7, 7, 7, 6, 7, 8, 9, 10, 11

29/30.flat(deep)/flatMap( ) es6
方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中
deep: ··concat 操作次数


var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]
 
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
 
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
 
//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity); 
// [1, 2, 3, 4, 5, 6]

31.flatMap( deep)
它与 map 和 深度值1的 flat 几乎相同,效率高一点

var arr1 = [1, 2, 3, 4];
 
arr1.map(x => [x * 2]); 
// [[2], [4], [6], [8]]
 
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
 
// 只会将 flatMap 中的函数返回的数组 “压平” 一层
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

六、静态Api

32.Array.from()
将一个类数组对象或者可遍历对象转换成一个真正的数组
最基本的要求就是具有length属性的对象
依据实参length、相应下标返回新的数组
可进行类map操作

//字符串转数组
Array.from('abc') //['a','b','c']

//类数组转数组
//实例1
var arrLike = {
	0: 'Gry',
	1: '88',
	3: 'Apple'
	length: 3
}
var arr = Array.from(arrLike) // ["Gry", "88", "undefined"]
//实例2
var arrLike = {
	0: 'Gry',
	1: '88',
	2: 'Apple'
}
var arr = Array.from(arrLike) // []
//实例3
var arrLike = {
	name: 'Gry',
	age: '88',
	favoriteFood: 'Apple',
	length: 3
}
var arr = Array.from(arrLike) // [undefined, undefined, undefined]

//类map操作
var arr = [1,2,3,4,5]
var fromArr = Array.from(arr, item =>  item * 2)
console.log(fromArr) // [2, 4, 6, 8, 10]

var likeArr = {
 1: 10,
 2: 20,
 0: 30,
 3: 40,
 'length': '3'
}
var fromArr = Array.from(likeArr, item =>  item * 2)
console.log(fromArr) // [60, 20, 40]

33.Array.isArray(item)
用于确定传递的值是否是一个数组
item: 需判断的值

// 下面的函数调用都返回 true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
Array.isArray(new Array('a', 'b', 'c', 'd'))
// Array.prototype 也是一个数组。
Array.isArray(Array.prototype); 

// 下面的函数调用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray(new Uint8Array(32))
Array.isArray({ __proto__: Array.prototype });

32.Array.of()
将传入的参数转换为数组
任意个参数,将按顺序成为返回数组中的元素

Array.of(3);       // [3]
Array.of(1, 4, 3)  // [1, 4, 3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值