js 数组常用方法

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

let newArr = [];

/***
 * Array.push()
 * 向数组的末尾添加元素
 * 改变原数组
 */
arr.push(0)   
console.log(arr) //arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

/**
 * Array.unshift()
 * 向数组开头添加元素
 * 改变原数组
 */
arr.unshift(0)  
console.log(arr) // arr=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

/**
 * Array.pop()
 * 弹出数组中最后一个元素
 * 改变原数组
 */
arr.pop()   
console.log(arr) // arr=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

/**
 * Array.shift()
 * 弹出数组中第一个元素
 * 改变原数组
 */
arr.shift() 
console.log(arr)  // arr=[1, 2, 3, 4, 5, 6, 7, 8, 9]

/**
 * Array.reverse()
 * 
 * 颠倒数组中元素的顺序。
 */
arr.reverse();
console.log(arr) //arr=[9, 8, 7, 6, 5, 4, 3, 2, 1]
arr.reverse();

/**
 * Array.splice() 
 * 用于添加或删除数组中的元素
 * 改变原数组
 * 语法:array.slice(start, end)
 * @param:
 *      index:  必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字
 *      howmany: 可选。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
 *      item1, ..., itemX: 可选。要添加到数组的新元素
 *
 * @return:
 *      如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
 *      如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。
 */

arr.splice(1)  
console.log(arr)  // arr=[1]

arr.splice(1,1)   
console.log(arr)  //arr = [1] 

arr.splice(1,1,2,3,4)  
console.log(arr)  // arr =[1, 2, 3, 4]

/**
 * Array.slice()
 * 不改变原始数组
 * @param:
 *      start:可选。规定从何处开始选取。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
 *      end:可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
 * @return:
 *      返回一个新的数组,包含从 start(包括该元素) 到 end (不包括该元素)的 arrayObject 中的元素。
 */

newArr=arr.slice(0,1)
console.log(arr)      // arr= [1, 2, 3, 4]
console.log(newArr)   // newArr=[1]

/**
 * Array.sort()
 * 
 * 语法:array.sort(sortfunction)
 * @param:
 *      sortfunction: 可选。规定排序顺序。必须是函数。
 * @return:
 *      Array 对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
 * 改变原始数组
 * 对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。默认排序顺序为按字母升序。
 * 注意:当数字是按字母顺序排列时"40"将排在"5"前面。使用数字排序,你必须通过一个函数作为参数来调用。函数指定数字是按照升序还是降序排列。
 */

arr.sort((a,b)=>{
    return b-a;
})
console.log(arr) // arr=[4, 3, 2, 1]

arr.sort((a,b)=>{
    return a-b;
})
console.log(arr) // arr=[1, 2, 3, 4]

/**
 * Array.every()
 * 不会改变原始数组
 * 语法:array.every(function(currentValue,index,arr), thisValue)
 * @param:
 *      function(currentValue, index,arr): 必须。函数,数组中的每个元素都会执行这个函数
 *              currentValue:必须。当前元素的值
 *              index:可选。当前元素的索引值
 *              arr:可选。当前元素属于的数组对象
 *      thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
 * @return:
 *      布尔值。如果所有元素都通过检测返回 true,否则返回 false。
 * 
 * 检测数组所有元素是否都符合指定条件(通过函数提供)。
 * 使用指定函数检测数组中的所有元素:
 *      如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
 *      如果所有元素都满足条件,则返回 true。
 */

let flag = arr.every((currentValue,index,arr)=>{
  return currentValue>0;
//   return currentValue>2;
})
console.log(flag)  // true
// console.log(flag)  // false 

/**
 * Array.some()
 * 不会改变原始数组
 * 语法:array.some(function(currentValue,index,arr),thisValue)
 * @param:
 *      function(currentValue,index,arr): 必须。函数,数组中的每个元素都会执行这个函数
 *              currentValue:必须。当前元素的值
 *              index:可选。当前元素的索引值
 *              arr:可选。当前元素属于的数组对象
 *      thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
 * @return:
 *          布尔值。如果数组中有元素满足条件返回 true,否则返回 false。
 *  
 */

 falg =arr.some((currentValue,index,arr)=>{
    return currentValue>2;
})

console.log(falg) //true



/**
 * Array.reduce()
 * 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
 * @param:
 *      function(total, currentValue, currentIndex, arr):必需。用于执行每个数组元素的函数。
 *              total:  必需。初始值, 或者计算结束后的返回值。
 *              currentValue:   必需。当前元素
 *              currentIndex: 可选。当前元素的索引
 *              arr:    可选。当前元素所属的数组对象。
 *      initialValue:   可选。传递给函数的初始值
 * 
 * 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
 * 可以作为一个高阶函数,用于函数的 compose。
 *      
 * 
 */

let num=arr.reduce((total, currentValue, currentIndex, arr)=>{
    return total+currentValue;
})
console.log(num); // num=10


/**
 * array.concat()
 * 
 * 语法:array1.concat(array2,array3,...,arrayX)
 *  @param:
 *      array2,array3,...,arrayX:必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
 *  @return:
 *      返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。
 * 方法用于连接两个或多个数组。
 * 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
 */

let arrs = arr.concat(newArr)
console.log(arr) //arr=[1, 2, 3, 4]
console.log(newArr) //newArr=[1]
console.log(arrs);  //arrs=[1, 2, 3, 4, 1]


/**
 * Array.filter()
 * 
 * 语法:array.filter(function(currentValue,index,arr), thisValue)
 * 
 * @param:
 *      function(currentValue,index,arr):必须。函数,数组中的每个元素都会执行这个函数
 *                currentValue:  必须。当前元素的值
 *                index: 可选。当前元素的索引值
 *                arr: 可选。当前元素属于的数组对象
 *      thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
 * @return:
 *      返回数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组。
 * 
 * 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
 * 不改变原始数组。
 */

let filterArr = arr.filter((currentValue,index,arr)=>{
    return currentValue>2;
})
console.log(arr)    //arr=[1, 2, 3, 4]
console.log(filterArr); //filterArr=[3, 4]

/**
 * Array.find()
 * 语法:array.find(function(currentValue, index, arr),thisValue)
 * @param:
 *      function(currentValue, index, arr):
 *              currentValue:   必需。当前元素
 *              index:可选。当前元素的索引值
 *              arr:可选。当前元素所属的数组对象
 *      thisValue:  可选。 传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值
 * 
 * @return:
 *      返回符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined。
 * 
 * 返回通过测试(函数内判断)的数组的第一个元素的值。
 * find() 方法为数组中的每个元素都调用一次函数执行:
 * 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
 * 如果没有符合条件的元素返回 undefined
 * 并没有改变数组的原始值
 */

let nums =arr.find((i)=>{
    return i<3;
})
console.log(arr) //arr =[1, 2, 3, 4]
console.log(nums) //nums=1

你可能感兴趣的:(js 数组常用方法)