JS常用方法总结--Array数组篇

个人学习笔记


 

Array数组:

一、增

1、push() 方法:可向数组的末尾添加一个或多个元素,返回值是新的长度,原数组会修改

 用法:array.push(item1, item2, ..., itemX)

var arr = [1,2,3,4,5,5,2,3];
var arr2 = arr.push(1,"小明");
console.log(arr);  // [1, 2, 3, 4, 5, 5, 2, 3, 1, "小明"]
console.log(arr2);  // 10

2、unshift() 方法:可向数组的开头添加一个或更多元素,返回值是数组新的长度,原数组会修改

用法:array.unshift ( item1, item2 , . . . , itemX)

var arr = [1,2,3,4,5,5,2,3];
var arr2 = arr.unshift("张三","李四");
console.log(arr);   // ["张三", "李四", 1, 2, 3, 4, 5, 5, 2, 3]
console.log(arr2);  // 10

3、splice() 方法:用于添加或删除数组中的元素,返回值是删除元素的数组,原数组会修改

用法:array.splice ( index,[howmany],[item1,[.....,[itemX]]] )

index(必需):数组中移除元素操作的起点,从 0 开始,

howmany(可选):要删除的元素数,如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素,

item1.....itemX (可选):要添加到数组的新元素

var arr = [1,2,3,4,5,5,2,3];
var arr1 = [1,2,3,4,5,5,2,3];
var arr2 = arr.splice(2,3);
var arr3 = arr1.splice(2,3,"张三","李四","王五","赵六",);
console.log(arr);   // [1, 2, 5, 2, 3]
console.log(arr2);  // [3, 4, 5]
console.log(arr1);  // [1, 2, "张三", "李四", "王五", "赵六", 5, 2, 3]
console.log(arr3);  // [3, 4, 5]

二、删

1、pop() 方法:用于删除数组的最后一个元素并返回删除的元素,返回值是删除的元素原数组会修改

用法:array.pop()

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

2、shift() 方法:用于把数组的第一个元素从其中删除,返回值是删除的元素原数组会修改

用法:array.shift()

var arr = [1,2,3,4,5,5,2,3];
var arr2 = arr.shift();
console.log(arr);   // [2, 3, 4, 5, 5, 2, 3]
console.log(arr2);  // 1

三、改

1、copyWithin()方法:将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组

用法:array.copyWithin ( target,  [start],  [end])

target(必需):从该位置开始替换数据。

start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。

end(可选):到该位置前(不包含该位置)停止读取数据,默认等于数组长度。如果为负值,表示倒数。

var a = [1,2,3,4,5];
var b = a.copyWithin(0,1,5);
console.log(a);  // [2, 3, 4, 5, 5]
console.log(b);  // [2, 3, 4, 5, 5]

2、fill() 方法:用于将一个固定值替换数组的元素,会修改当前数组.

用法:array.fill value, [start], [end] ),

value(必需):替换的值,

start, end(可选):开始和结束为止

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

3、map() 方法:返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。返回值是新的数组,原数组不会修改

用法:array.map function(currentValue, [index], [arr]),  [thisValue] )

var arr = [1,2,3,4,5,5,2,3];
var arr2 = arr.map(function(value){
  return value * 2;
});
console.log(arr);   // [1, 2, 3, 4, 5, 5, 2, 3]
console.log(arr2);  // [2, 4, 6, 8, 10, 10, 4, 6]

四、查

1、every() 方法:检测数组所有元素是否都符合指定条件(通过函数提供),有一个元素不满足,则整个表达式返回false,所有元素都满足条件,返回值是True。

用法:array.every function(currentValue, [index], [arr]),  [thisValue] )

function(currentValue,index,arr)(必需):数组中的每个元素都会执行这个函数。currentValue(必需):当前数组中元素的值,index和arr(可选):索引和元素所属的数组对象

thisValue(可选):对象作为该执行回调时使用,传递给函数,用作 "this" 的值

var arr = [1,2,3,4,5];
var isPositive = arr.every(function(value){
    return value > 2;
});
console.log(isPositive);  // false

2、some() 方法:用于检测数组中的元素是否满足指定条件(函数提供),有一个元素满足条件,则表达式返回true,如果没有满足条件的元素,则返回false。

用法:array.some function(currentValue, [index], [arr]),  [thisValue] )

var arr = ["小明",1,2,3,4,5,5,2,3];
var arr2 = arr.some(function(value){
  return value >= 2;
});
var arr3 = arr.every(function(value){
  return value >= 2;
});
console.log(arr2);  // true
console.log(arr3);  // false

3、includes() 方法:用来判断一个数组是否包含一个指定的值,返回值是布尔值,如果返回 true,否则false

 用法:arr.includes searchElement, [fromIndex]) 

 searchElement(必需):要查找的元素

 fromIndex(可选):从该索引处开始查找searchElement,如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。

var arr = [1,2,3,4,5,5];
// 判断arr数组是否包含了 2
var arr1 = arr.includes(2);
// 从索引3开始,判断arr数组是否包含了 2 
var arr2 = arr.includes(2,3);
// 如果fromIndex 大于等于数组长度 ,则返回 false 。该数组不会被搜索:
var arr3 = arr.includes(2,10);
// 如果 fromIndex 为负值,计算出的索引将作为开始搜索searchElement的位置。如果计算出的索引小于 0,则整个数组都会被搜索。
var arr4 = arr.includes(2,-100);
console.log(arr1);  // true
console.log(arr2);  // false    
console.log(arr3);  // false
console.log(arr4);  // true

4、filter() 方法:检查指定数组中符合条件(通过函数提供)的所有元素,返回一个新的数组

用法:array.filter function(currentValue, [index], [arr]),  [thisValue] )

var arr = [1,2,3,4,5];
var arr1 = arr.filter(function(value){
  return value >= 3;
});
console.log(arr1)  // [3, 4, 5]

5、find() 方法:返回符合条件(函数内判断)的数组的第一个元素的值

 用法:array.find function(currentValue, [index], [arr]),  [thisValue] )

var arr = [1,2,3,4,5];
var arr1 = arr.find(function(value){
    return value >= 3;
});
console.log(arr1);  // 3

6、findIndex() 方法:返回符合条件(函数内判断)的数组第一个元素位置

用法:array.findIndex function(currentValue, [index], [arr]),  [thisValue] )

var arr = [1,2,3,4,5];
var arr1 = arr.findIndex(function(value){
    return value >= 3;
});
console.log(arr1);  // 2

7、indexOf() 方法:可返回数组中某个指定的元素位置,返回值是Number,如果没有搜索到则返回 -1。

用法:array.indexOf ( item, [start])

var arr = [1,2,3,4,5,5,2];
// 返回数组中2的元素位置
var arr1 = arr.indexOf(2);
// 从索引3开始,返回数组中2的元素位置
var arr2 = arr.indexOf(2,3);
console.log(arr1);  // 1
console.log(arr2);  // 6

8、lastIndexOf() 方法:可返回数组中某个指定的元素位置,从该字符串的后面向前查找,返回值是Number,如果没有搜索到则返回 -1。

用法:array.indexOf ( item, [start])

var arr = [1,2,3,4,5,5,2];
// 返回数组中2的元素位置
var arr1 = arr.lastIndexOf(2);
// 从索引3开始,从右向左查找,返回原数组中2的元素位置
var arr2 = arr.lastIndexOf(2,3);
console.log(arr1);  // 6
console.log(arr2);  // 1

9、slice() 方法:可从已有的数组中返回选定的元素,返回值是新的数组,原数组不会修改。

用法:array.slice(start, [end])

var arr = ["小明",1,2,3,4,5,5,2,3];
var arr2 = arr.slice(2,5);
console.log(arr);  // ["小明", 1, 2, 3, 4, 5, 5, 2, 3]
console.log(arr2);  // [2, 3, 4]

五、排序

1、reverse() 方法:用于颠倒数组中元素的顺序,返回值是修改后的数组,原数组会修改

用法:array.reverse()

var arr = [1,2,3,4,5,5,2,3,"小明"];
var arr1 = arr.reverse();
console.log(arr);   // ["小明", 3, 2, 5, 5, 4, 3, 2, 1]
console.log(arr1);  // ["小明", 3, 2, 5, 5, 4, 3, 2, 1

2、sort() 方法:用于对数组的元素进行排序,排序顺序可以是字母或数字,并按升序或降序,默认排序顺序为按字母升序返回值是排序后的原数组,原数组顺序发生变化。

用法:array.sort ( [sortfunction])

sortfunction(可选):用来规定排序顺序的,必须是函数

var arr = ["小明",1,2,3,4,5,5,2,3];
var arr1 = arr.sort();
console.log(arr);   // [1, 2, 2, 3, 3, 4, 5, 5, "小明"]
console.log(arr1);  // [1, 2, 2, 3, 3, 4, 5, 5, "小明"]

六、转换

1、join() 方法:用于把数组中的所有元素转换一个字符串,返回值是字符串

用法:array.join ( [separator])

separator(可选):指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

var arr = [1,2,3,4,5,5,2];
// 如果省略该参数,则使用逗号作为分隔符
var arr1 = arr.join();
// separator 指定要使用的分隔符
var arr2 = arr.join("和");
console.log(arr);   // [1, 2, 3, 4, 5, 5, 2]
console.log(arr1);  // 1,2,3,4,5,5,2
console.log(arr2);  // 1和2和3和4和5和5和2

2、toString() 方法:可把数组转换为字符串,并返回结果,返回值是字符串

用法:array.toString()

var arr = [1,2,3,4,5,5,2,3];
var arr2 = arr.toString();
console.log(arr);   // [1, 2, 3, 4, 5, 5, 2, 3]
console.log(arr2);  // 1,2,3,4,5,5,2,3

3、concat()方法:连接两个或多个数组,返回值是一个新的数组

用法:array.concat (arrayX, arrayX, ......, arrayX)

var a = [1,2,3];
var b = [4,5,6];
var c = [7,8,9];
console.log(a.concat(b,c));  // [1, 2, 3, 4, 5, 6, 7, 8, 9]

类似方法:ES6的扩展运算符(…)用于取出参数对象中的所有可遍历属性,

var a = [1,2,3];
var b = [4,5,6];
console.log(a.push(...b));  // [1, 2, 3, 4, 5, 6]

4、from() 方法:将拥有 length 属性的对象或可迭代的对象,返回为一个新的数组

用法:Array.from object, [mapFunction], [thisValue])

object(必需):要转换为数组的对象

mapFunction(可选):数组中每个元素要调用的函数

thisValue(可选):映射函数(mapFunction)中的 this 对象

var arr = [1,2,3,4,5];
var arrStr = "hello";
var arr1 = Array.from(arr,function(x){
    return x * 100
});
var arrStr1 = Array.from(arrStr);
console.log(arr1);    // [100, 200, 300, 400, 500]
console.log(arrStr1);  // ["h", "e", "l", "l", "o"]

5、form()方法 结合 new Set() 可实现去重。

Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,一般称为集合。Set本身是一个构造函数,用来生成 Set 数据结构。

var arr = [1,2,3,4,5,5];
var arr1 = new Set(arr); 
console.log(arr1);  // 返回set数据结构  Set(5) {1, 2, 3, 4, 5}
var arr2 = Array.from(arr1);
console.log(arr2);  // [1, 2, 3, 4, 5]

七、遍历

1、forEach() 方法:循环遍历数组里的每一个元素,没有返回值

用法:array.forEach function(currentValue, [index], [arr]),  [thisValue] )

var arr = [1,2,3,4,5];
arr.forEach(function(value,index,arr) {
    console.log(value);
    // console.log(index);
    // console.log(arr);
});
/* 
1
2
3
4
5
*/

八、是否数组

26、isArray() 方法:用于判断一个对象是否为数组,返回值是布尔值。

用法:Array.isArray(obj)

var arr = [1,2,3,4,5,5,2];
var arr1 = Array.isArray(arr);
console.log(arr1);  // true

九、累加器

27、reduce() 方法:接收一个函数作为累加器,数组中的每个元素值(从左到右)开始累加,最终计算为一个值,返回值是最后一次调用回调函数获得的累计结果

用法:array.reduce function(total, currentValue, [currentIndex][arr]), initialValue)

callback的四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组

callback (执行数组中每个值的函数,包含四个参数)

    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素)
    3、index (当前元素在数组中的索引)
    4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)

27.1 简单用法

var  arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

27.2 高级用法

(1)计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1 
  }
  return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

(2)数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

(3)对象里的属性求和

var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum) //60

28、reduceRight() 方法:功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。

 用法:array.reduceRight( function(total, currentValue, [currentIndex][arr]), initialValue)

var arr = [1,2,3,4,5,5,2,3];
var arr1 = [1,2,3,4,5,5,2,3,"小明"];
var arr2 = arr.reduceRight(function(total,value){
  return total + value;
});
var arr3 = arr1.reduceRight(function(total,value){
  return total + value;
});
console.log(arr2);  // 25
console.log(arr3);  // 小明32554321
posted @ 2021-09-01 22:18  天黑请闭眼、  阅读(4289)  评论(0)    收藏  举报