美文网首页
JavaScript处理数组的方法

JavaScript处理数组的方法

作者: 青乌 | 来源:发表于2020-08-16 20:36 被阅读0次

创建数组的两种方式

1.使用new Array()构造函数

var arr = new Array();   //可以是空数组或直接写入数组内容

2.使用数组字面量表示法

var arr=[]  //可以是空数组或直接写入数组内容

数组的方法

常规方法
改变原数组:join()、push()和pop()、shift() 和 unshift()、sort()、reverse()、splice()
不改变原数组:concat()、slice()
ES5新增方法
indexOf()和 lastIndexOf()、forEach()、map()、filter()、every() 、some()、reduce()和 reduceRight()

- join():数组变字符串

默认不加为逗号。

//示例1
var arr = [],str
var arr = [1,2,3,4,5,6]
str = arr.join("")
console.log(str)  //'123456'

//示例2
str = arr.join()
console.log(str)  //'1,2,3,4,5,6'

//示例3
str = arr.join(' ')
console.log(str)  //'1 2 3 4 5 6'

- push():数组后追加任意长度新元素,返回数组

- pop():删除数组最后一位元素,返回删除的值

var arr =  [1,2,3,4,5,6]
arr.push(7,8)
console.log(arr)  //[1,2,3,4,5,6,7,8]
var item = arr.pop()
console.log(arr)  //[1,2,3,4,5,6,7]
console.log(item)  //8

- unshift():数组前追加任意新元素,返回数组

- shift():删除数组第一位元素,返回删除的值

var arr =  [1,2,3,4,5,6]
arr.unshift(0)
console.log(arr)  //[0,1,2,3,4,5,6]
var item = arr.shift()
console.log(arr)  //[1,2,3,4,5,6]
console.log(item)  //0

- sort():从小到大排列数组元素,或者可以加入方法进行特定排列。

默认转字符串后排列,所以数字不能有很好的结果,需要用方法进行排列。

//示例1
var arr = ["a","c","d","b"]
arr.sort()
console.log(arr)  // ["a","b","c","d"]

//示例2
var arr = [13, 24, 51, 3];
console.log(arr); // [13, 24, 3, 51]

//示例3
function compare(val1, val2) {
    if (val1 < =val2) {
        return false;//不换位
    } else {
        return true;//换位
    } 
}
var arr = [13, 24, 51, 3]
arr.sort(compare)
console.log(arr); // [3, 13, 24, 51]

- reverse():反转数组

var arr =  [1, 2 , 3, 4, 5, 6]
arr.reverse()
console.log(arr)  //[6, 5, 4, 3, 2, 1]

- concat():数组后追加新元素,返回新数组

追加数组会保持数组结构加入,非数组将分别追加(如下示例2、3)

//示例1
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat(7)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7]

//示例2
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat(7,[8,9])
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7, 8, 9]

//示例3
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat([7,[8,9]])
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7,[ 8, 9]]

- slice():利用下标拆分并返回新数组

规则--两个参数,下标都从0开始。传入一个参数第二位默认最后一位,传入正数从左到右数,传入负数从右向左数

//示例1
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(1)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [2 , 3, 4, 5, 6]

//示例2
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(1,3)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [2 , 3, 4]

//示例3
var arr =  [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(-3,-1)//也可写作slice(2,-1)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [3, 4, 5]

- splice():splice(起始位置, 要删除项数n , 任意数量插入项)

  1. splice(起始位置, 要删除项数n):从起始位置开始删除n项
var arr =  [1, 2 , 3, 4, 5, 6]
arr.splice(0,2)
console.log(arr) // [3, 4, 5, 6]

var arr =  [1, 2 , 3, 4, 5, 6]
arr.splice(1,2)
console.log(arr) // [1, 4, 5, 6]
  1. splice(起始位置, 要删除项数n , 任意数量插入项):最终插入或者替换数组
//插入:将删除项设为0
var arr =  [1, 2 , 3, 4, 5, 6]
arr.splice(0,0,0)
console.log(arr) // [0,1,2,3, 4, 5, 6]
arr.splice(5,0,7,8)
console.log(arr) // [0,1,2,3, 4, 5, 6,7,8]

//置换:设置删除项数,先删除后增加
var arr =  [1, 2 , 3, 4, 5, 6]
arr.splice(0,1,0)
console.log(arr) // [0,2,3, 4, 5, 6]
arr.splice(5,1,7,8) 
console.log(arr) // [0,2,3, 4, 5, 7, 8]

------------------接下来是不太一样的-------------------

-- indexOf()和 lastIndexOf():查找元素在数组的位置,一个顺序查一个反序查。

有重复的会返回第一个遇到该元素的位置(如示例2)。没有返回-1

//示例1
var arr =  [1, 2 , 3, 4, 5, 6]
var index = arr.indexOf(5)
var index1 = arr.lastindexOf(5)
console.log(index)  //4
console.log(index1)  //4

//示例2
var arr =  [1, 2 , 3, 4, 5,5, 6]
var index = arr.indexOf(5)
var index1 = arr.lastindexOf(5)
console.log(index)  //4
console.log(index1)  //5

//示例3
var arr =  [1, 2 , 3, 4, 5, 6]
index= arr.indexOf(7)
console.log(index)  //-1

-- forEach():遍历。forEach(数组每项内容, 下标, 数组本身)

var arr = [1, 2, 3, 4, 5];
arr.forEach(function(item, index, arr){
    console.log(item + '|' + index + '|' + arr);
});
// 输出为:
// 1|0| [1, 2, 3, 4, 5]
// 2|1| [1, 2, 3, 4, 5]
// 3|2| [1, 2, 3, 4, 5]
// 4|3| [1, 2, 3, 4, 5]
// 5|4| [1, 2, 3, 4, 5]

-- map():映射。用数学理解就是建立数组关系。

//示例1: 倍增
var arr =  [1, 2 , 3, 4, 5, 6]
var arr2 = arr.map(function(item){
    return 2*item;
});
console.log(arr2) //[2, 4 , 6, 8, 10, 12]

//示例2: 平方
var arr =  [1, 2 , 3, 4, 5, 6]
var arr2 = arr.map(function(item){
    return item*item;
});
console.log(arr2) //[1, 4 , 9, 16, 25, 36]

-- filter():过滤,返回符合条件的。

主要还是看条件表达式怎么写,比如2的倍数、质数或者什么数列元素。

var arr = [1, 2, 3, 4, 5, 6, 7, 8];
var arr2 = arr.filter(function(item) {
        return item % 2 === 0 ;
}); 
console.log(arr2); //[2, 4, 6, 8]

-- every():判断每一项,都符合返回true,否则返回false。

判断数组是不是都符合某一个规律。

var arr = [1, 2, 3, 4, 5, 6, 7, 8];
var b = arr.filter(function(item) {
        return item % 2 === 0 ;
}); 
console.log(b)  //false

//对比组
var arr = [2, 4, 6, 8, 10, 12, 14, 16];
var b = arr.filter(function(item) {
        return item % 2 === 0 ;
}); 
console.log(b)  //true

-- some():数组里有一项符合条件就返回true。

var arr = [1, 3, 5, 7, 9, 11, 13, 15];
var b = arr.filter(function(item) {
        return item % 2 === 0 ;
}); 
console.log(b)  //false

//对比组
var arr = [1, 2, 3, 4, 5, 7, 9, 11];
var b = arr.filter(function(item) {
        return item % 2 === 0 ;
}); 
console.log(b)  //true

-- reduce()和 reduceRight():一个顺序一个反序。

arr.reduce(function(prev,cur,index,arr){...}, init)

  • init 表示初始值。
  • arr 表示原数组;
  • prev 表示上一次调用回调时的返回值,或者初始值 init;
  • cur 表示当前正在处理的数组元素;
  • index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
//求和
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
        return prev + cur;
});
console.log(sum); //5

1.未设置init, index=1, prev=1, cur=2
2.返回 3, prev=3, cur=3
3.返回 6, prev=6, cur=4
4.返回 10, prev=10, cur=5
5.返回 15, 结束

//求最大值
var max = arr.reduce(function (prev, cur) {
    return Math.max(prev,cur);
});
//Math.max(prev,cur)  每次都会返回较大的作为prev与下一项cur进行比较
//数组去重
var newArr = arr.reduce(function (prev, cur) {
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[]);
//prev.indexOf(cur) === -1  判断是否存在该元素
//a && b,如果a存在,则返回b,否则返回a
//不存在就添加该元素到新数组,新数组不添加已存在的元素

相关文章

网友评论

      本文标题:JavaScript处理数组的方法

      本文链接:https://www.haomeiwen.com/subject/vkfzdktx.html