JS数组常用操作

JS数组常用操作

添加一个元素到数组的最后的位置:

```

方式一:numbers[numbers.length] = 10

方式二:numbers.push(11)

```

在数组首位插入一个元素:

```

for (var i = numbers.length; i > 0; i--) {

    numbers[i] = numbers[i-1]

}

numbers[0] = -1     

```

删除最后的元素

```

numbers.pop()

```

删除首位的元素

```

numbers.shift()

```

splice:是做(1)删除 、(2)插入、(3)修改用的。在原数组上进行操作。

(1)删除指定位置的几个元素,第一个参数表示从索引为5(其实是第6个元素)开始删除3个元素.,返回的是删除的元素所组成的数组。

```

numbers.splice(5, 3)

```

(2)在指定位置插入元素, numbers.splice(5, 0, 3, 2, 1)中,第一个参数依然是索引值为5(第六个位置),第二个参数为0时表示不是删除数据, 而是插入数据,后面紧跟的是在这个位置要插入的数据, 可以是其他类型的数据。无返回值。

```

numbers.splice(5, 0, 3, 2, 1)

```

(3)在指定位置修改元素,第一个参数表示从索引为5的位置开始修改,第二个参数是要将数组中多少个元素给替换掉。无返回值。

```

numbers.splice(5, 1, "a", "b", "c")

```

slice:是截取字符串用的,在原数组的副本上进行操作。返回的截取的数组。

第一个参数:开始位置的索引。第二个参数:结束位置的索引(但不包含该索引位置的元素), 如果没有最后一个参数,则截取到最后。

```

var newArr = numbers.slice(1)

```

数组合并

```

var nums1 = [1, 2, 3]

var nums2 = [100, 200, 300]

var newNums = nums1.concat(nums2)

console.log(newNums) // 1,2,3,100,200,300

newNums = nums1 + nums2

console.log(newNums) // 1,2,3,100,200,300

```

迭代方法:(1)every()方法,(2)some()方法,(3)forEach()方法(4)filter()方法 (5)map()方法

(1)every()方法是将数组中每一个元素传入到一个函数中, 该函数返回的是布尔类型true/false。如果函数中每一个元素都返回true, 那么结果为true, 有一个为false, 那么结果为false

// 判断数组的元素是否都包含a字符

```

var flag = names.every(function (t) {

    return t.indexOf('a') != -1

})

console.log(flag)//false

```

(2)some()方法是将数组中每一个元素传入到一个函数中, 该函数返回布尔类型true/false。但是和every不同的是, 一旦有一次函数返回了true, 那么迭代就会结束. 并且结果为true

// 判断数组中是否包含有a字符的字符

```

var flag = names.some(function (t) {

    return t.indexOf("a") != -1

})

console.log(flag)//true

```

(3)forEach()方法仅仅是一种快速迭代数组的方式而已,该方法不需要返回值,返回值为undefined

```

names.forEach(function (t) {

    console.log(t)

})

```

(4)filter()方法是一种过滤的函数。首先会遍历数组中每一个元素传入到回调函数中。函数的结果返回true, 那么这个元素会被添加到最新的数组中, 返回false, 则忽略该元素。最终会形成一个新的数组, 该数组就是filter()方法的返回值。

```

// 获取names中所有包含'a'字符的元素组成的新数组

var newNames = names.filter(function (t) {

    return t.indexOf("a") != -1

})

console.log(newNames)

```

(5)map()方法提供的是一种映射函数。首先会遍历数组,将其中每一个元素传入到回调函数中,元素会经过回调函数中进行各种变换, 生成新的元素, 并且将新的元素返回。 最终会将返回的所有元素形成一个新的数组, 该数组就是map()方法的返回值。

```

var newNames = names.map(function (t) {

    return t + "-abc"

})

console.log(newNames)

```

(6)reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。reduce() 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上次回调函数的返回值),当前元素值,当前索引,调用reduce的数组。

```

arr.reduce(callback, [initialValue])

```

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

- previousValue  (上一次调用回调返回的值,或者是提供的初始值(initialValue))

- currentValue  (数组中当前被处理的元素)

- index (当前元素在数组中的索引)

- array (调用 reduce 的数组)

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

例一:

```

var arr = [1, 2, 3, 4];

var arr = [1, 2, 3, 4];

var sum = arr.reduce((pre, cur, index, arr) => {

    console.log(pre, cur, index);

    return pre + cur;

})

console.log(arr, sum);

打印结果:

1 2 1

3 3 2

6 4 3

[1, 2, 3, 4] 10

```

这里可以看出,上面的例子index是从1开始的,第一次prev的值是数组的第一个值,数组的长度是4,但是reduce函数循环3次。

例二:

```

var arr = [1, 2, 3, 4];

var sum = arr.reduce((pre, cur, index, arr) => {

    console.log(pre, cur, index);

    return pre + cur;

}, 0)//指定cur的类型为Number并且初始值为0

console.log(arr, sum);

0 1 0

1 2 1

3 3 2

6 4 3

[1, 2, 3, 4] 10

```

这个例子index是从0开始的,第一次的perv的值是我们设置的初始值0,数组长度是4,reduce函数循环4次。如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

你可能感兴趣的:(JS数组常用操作)