数组方法

 

Array 使用


将类数组转换成数组

  • Array.from(val)
  • [...val] 扩展运算符

 

查找数组中是否存在某个值

  • arr.indexOf(val)

 

  • arr.find(callback) 满足要求第一个元素值
  • arr.findIndex(callback) 满足要求第一个元素索引

 

  • arr.every(callback) 有一项不满足要求则返回false
  • arr.some(callback) 有一项满足要求则返回true

 

  • arr.includes(val[, index]) 判断数组中是否包含一个指定的值

 

  • 转成Set,通过set.has(val)判断

 

遍历数组

传送门

  • for in 遍历数组元素的索引
  • for of 遍历数组元素的值

 

  • arr.forEach(callback) 循环数组
  • arr.map(callback) 映射(替换)元素
  • arr.filter(callback) 过滤元素
  • arr.reduce(callback) 计算元素
  • arr.every(callback) 有一项不满足要求则返回false
  • arr.some(callback) 有一项满足要求则返回true

 

  • arr.find(callback) 满足要求第一个元素值
  • arr.findIndex(callback) 满足要求第一个元素索引

 

注意:

  • map、forEach、filter、reduce、every、some
    • 不改变原数组;兼容IE9及以上。
    • 不过可以通过babel转义支持IE低版本
    • forEach 无返回值
    • map、filter返回一个新数组。
    • reduce 让数组的前后两项进行某种计算,返回最终操作的结果

 

Array 构造函数的静态方法


Array.from 将类数组转换成数组(ES6+)

 

Array Array.from(arrayLike[, mapFn[, thisArg]]) 将类数组转换成数组

 

类数组:有下标有length

 

参数:

  • arrayLike 类数组

 

可选参数:

  • mapFn 类似 map 方法,循环类数组时的回函函数,返回值组成新数组
  • thisArg mapFn 函数执行时的 this 指向

 

返回值:根据 arrayLike 生成的新数组

 

 

Array.isArray 检测数据是否是个数组(ES6+)

 

Boolean Array.isArray(data) 检测数据是否是个数组

 

参数:

  • data 要检测的数据

 

返回值:true 数组,false 非数组

<ul>
    <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
</ul>

const lis = document.querySelectorAll('ul li') // 返回类数组

const val = Array.from(lis) // 将类数组转成数组
console.log('val: ', val)

const arr = [1, 2, 3]
Array.from(lis, function (item, index) {
  // 注意:使用thisArg这个参数时,mapFn不能使用箭头函数,不然this指向Window
  console.log(item, index)
  console.log('this: ',this)
}, arr)

// 返回
val: [li, li, li, li]

<li>1</li> 0
<li>2</li> 1
<li>3</li> 2
<li>4</li> 3

this: [1, 2, 3]

 

Array.of 将参数转成一个数组(ES6+)

 

Array Array.of(element0[, element1[, ...[, elementN]]]) 将参数转成一个数组

 

参数:

  • elementN 要放入数组中的数据

 

返回值:新数组

 

condt arr = Array.of(1, 2, 3, 4)
console.log(arr) // [1, 2, 3, 4]

 

Array 构造函数原型上的实例方法

arr.find 查找满足要求的第一个元素的值(ES6+)

 

Value arr.find(callback[, thisArg]) 查找数组中满足要求的第一个元素的值

 

参数:

  • callback 在数组每一项上执行的函数,接收 3 个参数:
    • element 当前遍历到的元素。
    • index[可选] 当前遍历到的索引。
    • array[可选] 数组本身

 

可选参数:

  • thisArg 执行回调时用作this 的对象

 

返回值:

数组中第一个满足所提供测试函数的元素的值,否则返回 undefined

const arr = [1, 2, 3, 4]

// 查找数组中满足要求的第一个元素的值
const find = arr.find((item, index) => {
  // return item > 5 // undefined
  // return item // 1
  return item >= 3 // 3
})
console.log(find)

// 可选参数
const arr1 = []
arr.find(function (item, index) {
  console.log(this) // []
}, arr1)

arr.findIndex 查找满足要求的第一个元素的索引(ES6+)

 

Index arr.findIndex(callback[, thisArg]) 查找数组中满足要求的第一个元素的值的索引

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素。
    • index 当前元素的索引。
    • array 调用findIndex的数组。

 

可选参数:

  • thisArg 执行callback时作为this对象的值

 

返回值:满足要求的值的索引,不满足返回-1

 

const arr = [1, 2, 3, 4]

// 查找数组中满足要求的第一个元素的值的索引
const find = arr.findIndex((item, index) => {
  // return item > 5 // -1
  // return item // 0
  return item >= 3 // 2
})
console.log(find)

// 可选参数
const arr1 = []
arr.find(function (item, index) {
  console.log(this) // []
}, arr1)

 

arr.flat 扁平化多维数组(ES6+)

 

Array arr.flat([depth]) 扁平化多维数组

 

可选参数:

  • depth 指定要提取嵌套数组的结构深度,默认值为 1。

 

返回值:一个包含将数组与子数组中所有元素的新数组

const arr = [
    ['www', 18],
  ['abc', 20],
  [3, 4, 
    [5, 
      ['a', 'b']
    ],
   6
    ]
]
console.log(arr.flat()) // ["www", 18, "abc", 20, 3, 4, Array(2), 6]
console.log(arr.flat(1)) // ["www", 18, "abc", 20, 3, 4, Array(2), 6]
console.log(arr.flat(2)) // ["www", 18, "abc", 20, 3, 4, 5, Array(2), 6]
console.log(arr.flat(Infinity)) // ["www", 18, "abc", 20, 3, 4, 5, "a", "b", 6]

arr.flatMap 遍历扁平化多维数组(ES6+)

 

Array arr.flatMap(callback[, thisArg]) 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 和 深度值1的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。

 

参数:

  • callback 可以生成一个新数组中的元素的函数,返回新数组的元素。可以传入三个参数:
    • currentValue 当前正在数组中处理的元素
    • index 可选的。数组中正在处理的当前元素的索引。
    • array 可选的。被调用的 flatMap 数组

 

可选参数:

  • thisArg 执行 callback 函数时 使用的this 值

 

返回值:一个包含将数组与子数组中所有元素的新数组

 

注意:

  • 不改变原数组
const arr = [
    ['www', 18],
  ['abc', 20]
]
const newArr = arr.flatMap((item, index, array) => {
    item = item.filter((val, index) => {
    return index === 0
  })
  return item
})
console.log(newArr) // ["www", "abc"]

arr.fill 填充(ES6+)

 

Array arr.fill(value[, start[, end]]); 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引

 

参数:

  • value 用来填充数组元素的值。

 

可选参数:

  • start 起始索引,默认值为0。
  • end 终止索引,默认值为 arr.length
const arr = [1,2,3,4,5,6]
// arr.fill('a') // ["a", "a", "a", "a", "a", "a"]
// arr.fill('a', 2) // [1, 2, "a", "a", "a", "a"]
// arr.fill('a', 2, 20) // [1, 2, "a", "a", "a", "a"]
arr.fill('a', 2, 4) // [1, 2, "a", "a", 5, 6]
console.log(arr)

arr.includes 判断数组中是否包含一个指定的值(ES6+)

 

Boolean arr.includes(valueToFind[, fromIndex]) 判断数组中是否包含一个指定的值

 

参数:

  • valueToFind 需要查找的值

 

可选参数:

  • 从 fromIndex 处开始向后查找

 

返回值:true || false true 代表数组中包含 valueToFind, false 代表数组中不包含 valueToFind

const arr = ['a', 'b', 'c', 'd']
console.log(arr.includes('a')) // true
console.log(arr.includes('c', 3)) // false

arr.forEach() 遍历

无 arr.forEach(callback) 遍历数组

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素
    • index 当前元素的索引
    • array 调用map的数组

 

返回值:无返回值

 

缺点:

  • 会循环不必要的内容

 

特点:

  • 会有独立作用域
  • 循环不能被break中止

 

注意:

  • 不改变原数组
  • 不允许在循环体内写return
  • forEach()也可以循环对象。
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [1,2,3,4];
array.forEach((item, index, array) => {
  console.log(item);
})

arr.map() 映射

Array arr.map(callback) 替换数组中的元素

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素
    • index 当前元素的索引
    • array 调用map的数组

 

返回值:

新数组

 

注意:

  • 不改变原数组
  • 需要配合return,return的值会将原数组中的对应值替换掉
  • 若是没有return,相当于forEach()
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [1, 2, 3, 4];
let temp = array.map((item, index, array) => {
  return item * 10;
});
console.log(temp);  //  [10, 20, 30, 40];
console.log(array);  // [1, 2, 3, 4]

实例:把数组里的元素都转成字符串类型

let array = [1, 2, 3, 4];
let temp2 = array.map(String);
console.log(temp2); // => ["1", "2", "3", "4"]

arr.filter() 过滤

Array arr.filter(callback) 滤掉数组中不满足条件的元素

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素
    • index 当前元素的索引
    • array 调用filter的数组

 

返回值:

新数组,将满足条件的元素放到新数组中

 

缺点:

  • 会循环不必要的内容

 

注意:

  • return不改变原数组,但是赋值会改变原数组内容
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [1, 2, 3, 4];
let temp = array.filter((item, index, array) => {
  // item = 6 // 赋值会改变原数组内容
 return item >  3;
});
console.log(temp);  // => [4]
console.log(array);  // => [1, 2, 3, 4]

arr.reduce() 计算

Value arr.reduce(callback, element) 将数组计算为一个值

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面两个参数:
    • x 是上一次计算过的值, 第一次循环的时候是数组中的第1个元素
    • y 是数组中的每个元素, 第一次循环的时候是数组的第2个元素

 

可选参数:

  • element 初始值

 

返回值:

返回计算后的值

 

注意:

  • 不改变原数组
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [1, 2, 3, 4];
let temp = array.reduce((x, y) => {
    return x + y;
});
console.log(temp);  // 10
console.log(array);  // [1, 2, 3, 4]
# 可选参数使用
let arr = [1, 2, 3]
let num = arr.reduce((a, b) => {
    return a + b * b
}, 0)
console.log(num) // => 14 : 0 + 1 * 1 + 2 * 2 + 3 * 3

let num1 = arr.reduce((a, b) => {
    return a + b * b
}, 4)
console.log(num1) // => 18 : 4 + 1 * 1 + 2 * 2 + 3 * 3

arr.every() 有一项不满足要求则返回false

Boolean arr.every(callback) 有一项不满足要求则返回false,类似查找,返回false

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素
    • index 当前元素的索引
    • array 调用every的数组

 

返回值:

true || false 每一项都是true, 则返回true, 只要有一个是false, 就返回false

 

注意:

  • 不改变原数组
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [2, 2, 1, 4];
let bo = array.every((item, index, array) => {
  return item > 2;
});
console.log(bo);    // false;

arr.some() 有一项满足要求则返回true

Boolean arr.some(callback) 有一项满足要求则返回true

 

参数:

  • callback 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
    • element 当前元素
    • index 当前元素的索引
    • array 调用some的数组

 

返回值:

true || false 遍历数组的每一项, 满足要求就返回true, 并停止循环

 

注意:

  • 不改变原数组
  • 兼容IE9及以上。不过可以通过babel转义支持IE低版本
let array = [1, 2, 6, 4];
let temp = array.some((item, index, array) => {
  return item > 5;
});
console.log(temp);  // true
# 封装函数
let arr = ['apple', 'banana', 'orange'];
function findInArray(arr, item){
    return arr.some((val, index, arr)=>{
        return val == item;
    })
}
findInArray(arr, 'orange');

arr.sort 排序

Array arr.sort(callback) 排序

 

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

 

可选参数:

  • callback 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
    • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    • 若 a 等于 b,则返回 0。
    • 若 a 大于 b,则返回一个大于 0 的值。

 

返回值:返回排序好的数组

 

注意:

  • 改变原数组
let arr = [1, 6, 2, 4];

// 升序
const arr1 = arr.sort((a, b) => {
    return a - b
})
console.log(arr) // => [1, 2, 4, 6]
console.log(arr1) // => [1, 2, 4, 6]

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值