Javascript常用Array内置方法详解(1)

目录

一、前言

二、Array内置方法详解 

1.Array.prototype.at()

2.Array.prototype.concat()

 3.Array.prototype.copyWithin(target,start,end)

4.Array.prototype.entries() 

 5. Array.prototype.every()


一、前言

无论是学习还是使用Javascript最绕不开的数据结构之一:Array数组,在平常的开发中我们需要对数组进行一系列的操作,如果都靠自己手写完成是很麻烦的一件事,所以熟练的掌握和使用Array的内置函数尤为重要。

 熟练的使用内置函数可以:

  1. 提升代码的简洁性
  2. 能拥有更好的效率和性能
  3. 提高代码的可读性

二、Array内置方法详解 

1.Array.prototype.at()

方法描述:

方法接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数。

参数:

要返回的数组元素的索引(从零开始)。负数索引从数组末尾开始计数——如果 index < 0,则会访问 index + array.length 位置的元素。

let arr = [1, 2, 3, 4, 5]
console.log(arr.at(0)) //=>1
console.log(arr.at(-1)) //=>5

可以看到我们是可以像python那样获取末尾的数组数据,但是要注意这是数组的方法而不是可以通过索引直接访问.

返回值:

返回数组中与给定索引匹配的元素。如果 index < -array.length 或 index >= array.length,则总是返回 undefined,而不会尝试访问相应的属性。

let arr = [1, 2, 3, 4, 5]
console.log(arr.at(7)) //=>undefined
console.log(arr.at(-6)) //=>undefined

如何不带索引值,则会默认返回第一个元素

let arr = [1, 2, 3, 4, 5]
console.log(arr.at()) //=>1

在非数组上调用at方法,我们可以使用call来改变this的指向

const arrayLike = {
  length: 3,
  0: 'a',
  1: 'b',
  2: 'c'
}
console.log(Array.prototype.at.call(arrayLike, -1)) // => "c"

这里的arrayLike是一个类数组对象,索引必须要严格递增,不可以跳过前面的索引,否则无法正常返回。

2.Array.prototype.concat()

方法描述:

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

参数:

数组和/或值,将被合并到一个新的数组中

返回值:

返回一个合并后的数组

示例:

1.数组合并值(包括字符串,函数等)

const array1 = ['a', 'b', 'c']
const array4 = array1.concat('d', 1, function () {
  console.log(111)
})
console.log(array4)
array4.forEach(function (item) {
  //用来测试方法是否可执行
  if (typeof item === 'function') {
    item()
  }
})

运行结果:

 2.合并多个数组

const array1 = ['a', 'b', 'c']
const array2 = ['d', 'e', 'f']
const array3 = ['g', 'h', 'i']
const array4 = array1.concat(array2, array3)
console.log(array4) // => ['a','b','c','d','e','f','g','h','i']

3.合并多重数组(复杂数组元素),如果存在空值,会保留,并返回empty

const array1 = ['a', 'b', 'c']
const array2 = ['d', 1, ,['e',['f']],function list() {
  console.log(111);
}]
const array4 = array1.concat(array2)
console.log(array4)

输出:

 3.Array.prototype.copyWithin(target,start,end)

方法描述:

copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。

参数:

1.target(必选)复制到的目标位置的索引。

2.start(可选)复制元素的起始位置的索引(包含该位置的元素),默认值为0。如果为负值,则表示倒数的索引(-1 表示数组最后一个元素

3.end(可选)复制元素的结束位置的索引(不包含该位置的元素),默认值为数组的长度。如果为负值,则表示倒数的索引。

返回值:

被改变的数组

示例:

1.只有target

const array1 = [1, 2, 3, 4, 5, 6, 7, 8]
console.log(array1.copyWithin(2)) // [1, 2, 1, 2, 3, 4, 5, 6]
console.log(array1.copyWithin(4)) // [1, 2, 3, 4, 1, 2, 3, 4]

方法执行流程:

  • 因为没有参数表明复制的位置,所以默认复制数组的所有元素
  • 然后用复制的元素覆盖指定索引位置后的所有元素

2.有start 

const array1 = [1, 2, 3, 4, 5, 6, 7, 8]
console.log(array1.copyWithin(2, 4)) // [1, 2, 5, 6, 7, 8, 7, 8]

方法执行流程:

  • 从指定的索引 ”4“ 开始复制,也就是从元素 “5“ 开始复制
  • 然后替换索引 ”2“ 后面的所有元素

3.有start和end

const array1 = [1, 2, 3, 4, 5, 6, 7, 8]
console.log(array1.copyWithin(2, 4, 6)) // [1, 2, 5, 6, 5, 6, 7, 8]

如果前面二个例子理解了的话这个就迎刃而解了

执行流程:

  • 复制指定索引的元素为:[5,6]
  • 然后替换掉索引 ”2“ 位置后的元素

4.Array.prototype.entries() 

方法描述:

entries() 方法返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对。

无参数

返回值:

返回一个新的迭代器对象

示例:

var fruits = ['Banana', 'Orange', 'Apple', 'Mango']
var f = fruits.entries()

for (x of f) {
  console.log(x)
}

输出值:

 5. Array.prototype.every()

方法描述:

every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。

参数:

callbackFn:(必需)用来测试每个元素的函数

thisArg:(可选),在执行回调函数时使用的this值。

返回值:

如果都满足:true,否则:false

示例:

1.检查数组所有元素的大小

function isBigEnough(element) {
  return element >= 10
}
let arr = [10, 20, 30, 40, 5]
console.log(arr.every(isBigEnough)) // false
console.log(arr.every((item) => item > 1)) // true

2.检查一个数组是否是另外一个数组的子集

const isSubset = (array1, array2) => array2.every((element) => array1.includes(element))

console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])) // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])) // false

includes方法我们后续会讲到,其作用就是检查数组是否包含指定的元素

3.在稀疏数组上使用

console.log([1, , 3].every((item) => item !== undefined)) // true
console.log([2, , 2].every((item) => item === 2)) // true

可以看到every会忽略空槽

猜你喜欢

转载自blog.csdn.net/m0_64642443/article/details/131457696