ES6中数组新增的方法-超级好用

简介: ES6中数组新增的方法-超级好用

Array.find((item,indexArr,arr)=>{}) 掌握


找出第一个符合条件的数组成员。


它的参数是一个回调函数,对所有数组成员依次执行该回调函数。


直到找出第一个返回值为true的成员,然后返回该成员。


如果没有符合条件的成员,则返回undefined。


-- 找出第一个大于15的数字
let arr = [10, 20, 30]
let firstItem = arr.find((item, index, Arr) => {
    return item > 15
})
console.log('firstItem==>', firstItem); //输出20
-- 找出第一个大于19的数字的这一项的值
let arr = [{
    age: 10
  }, {
    age: 20
  }, {
    age: 30
  }]
let firstItem = arr.find((item, index, Arr) => {
    return item.age > 19
})
console.log('firstItem==>', firstItem); //输出{age: 20}

Array.findIndex((item, index, Arr) => {}) 掌握


数组实例的 findIndex 方法的用法与find方法非常类似,


返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

let arr = [{
    age: 10
}, {
    age: 20
}, {
    age: 30
}]
let a = arr.findIndex((item, index, Arr) => {
    return item.age > 15
})
let b = arr.findIndex((item, index, Arr) => {
    return item.age > 45
})
console.log('a==>', a); //输出1
console.log('b==>', b); //输出-1
//查找数组的某一项是否有某个值
//返回第一个符合条件的数组成员的位置
const arr = [{
    id: 001
}, {
    id: 002
}, {
    id: 003
}];
let index = arr.findIndex(item => {
    return item.id == '004'
})
console.log(index);

Array.flat()用于拉平嵌套的数组[推荐-超级好用]


数组的成员有时还是数组,Array.flat()用于将嵌套的数组“拉平”,变成一维的数组。
该方法返回一个新数组,对原数据没有影响。
[1, 2, [3, 4]].flat() 读音【fu la t】
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组。
可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
[1, 2, [3, [4, 5]]].flat()
上面代码中,表示想要拉平的层数,默认为1
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
上面代码中,flat()的参数为2,表示要“拉平”两层的嵌套数组。
// [1, 2, 3, 4, 5]
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
[1, [2, [3]]].flat(Infinity) 
// [1, 2, 3]
如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]


Array.at()返回对应下标的值[超级好用]


我们都知道JavaScript不支持数组索引值为负索引。  


那么想要表示数组的最后一个成员,不能写成arr[-1],只能使用arr[arr.length - 1]。


为了解决负索引这个问题,es6中为数组实例增加了at()方法,接受一个整数作为参数。


返回对应位置的成员,支持负索引。


这个方法不仅可用于数组, 也可用于字符串和类型数组( TypedArray)。


如果参数位置超出了数组范围,at()返回undefined。

const arr = [100, 120, 18, 130, 4];
console.log(arr.at(1)) //120
console.log(arr.at(-1)) //4
console.log(arr.at(-5)) //100
console.log(arr.at(-6)) //undefined

Array.from() [掌握]


一个类似数组的对象,Array.from将它转为真正的数组。


需要注意的是:这个类似数组的对象必须要有length属性才可以,转为数组。


否者将会转为为一个空数组


let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
  length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
当没有类似数组的对象没有length属性
let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
};
//此时返回的是一个空数组
let arr2 = Array.from(arrayLike); // []


Array.of() 了解


Array.of()方法用于将【一组数值】转换为数组.


简单的使用:


const a = Array.of(10, 20, 26, 38);
console.log(a); // [10, 20, 26, 38]
const b = Array.of(1).length;
console.log(b);         // 
Array.of()可以用以下的代码模拟实现:
function ArrayOf() {
  return [].slice.call(arguments);
}


Array.includes的使用


Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值。


与字符串的includes方法类似。ES2016 引入了该方法。


简单的使用方法


const arr = [100, 200, 300];
console.log(arr.includes('100')) //false
console.log(arr.includes(100)) //true


没有该方法之前,我们使用数组的indexOf方法,检查是否包含某个值。
if (arr.indexOf(el) !== -1) {
  // 有这个值
}
indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,
所以要去比较是否不等于-1,表达起来不够直观。
二是,它内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。
[NaN].indexOf(NaN) // -1
includes使用的是不一样的判断算法,所以没有这个问题。
[NaN].includes(NaN)
// true


扩展运算符 (...)


扩展运算符是三个点(...),
将一个数组转为用逗号分隔的参数序列。
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]


let arr1=[11,22,];
let  arr2=["aa","bb"];
//  es5的合并
let arr=arr1.concat(arr2);
console.log(arr) // [11, 22, "aa", "bb"]
//es6
let newarr=[...arr1,...arr2]
console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]


// 函数内部有一个对象,arguments可以获取到实参,但是一个伪数组
//Array[饿 rei]
function sun(){
  console.log(arguments) 
  //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]  他是一个伪数组
}
sun(1,2,3,4,5,6,7,9);
// 如何将函数内部的伪数组变为真实的数组 方法1
function sun(){
  let ags=Array.prototype.slice.call(arguments);
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);
// 如何将函数内部的伪数组变为真实的数组 方法2
function sun(){
  let ags=[...arguments];//将伪数组百年未真实的数组
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);
//  总结扩展运算符是...   [...变为真实数组的对象]


数组的空位


数组的空位指的是,数组的某一个位置没有任何值.


比如Array()构造函数返回的数组都是空位。

let arr = new Array(3)
console.log(arr); // [, , ,] 谷歌浏览器中会有出现  [空属性 × 3]

上面代码中,Array(3)返回一个具有 3 个空位的数组。


ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。


forEach(), filter(), reduce(), every() 和some()都会跳过空位。


map()会跳过空位,但会保留这个值


join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。


ps:ES6 则是明确将空位转为undefine


let arr = new Array(3)
console.log(arr[0] === undefined); //true


ps:ES6 则是明确将空位转为undefined。
Array.from()方法会将数组的空位,转为undefined,也就是说,这个方法不会忽略空位。
Array.from(['a',,'b'])
// [ "a", undefined, "b" ]
扩展运算符(...)也会将空位转为undefined。
[...['a',,'b']]
// [ "a", undefined, "b" ]
new Array(3).fill('a') // ["a","a","a"]
for...of循环也会遍历空位。
let arr = [, ,];
for (let i of arr) {
  console.log(1);
}
// 1
// 1


上面代码中,数组arr有两个空位,for...of并没有忽略它们。


如果改成map()方法遍历,空位是会跳过的

相关文章
|
2月前
|
前端开发 JavaScript API
一文吃透 Promise 与 async/await,异步编程也能如此简单!建议收藏!
在前端开发中,异步编程至关重要。本文详解了同步与异步的区别,通过生活化例子帮助理解。深入讲解了 Promise 的概念、状态及链式调用,并引入 async/await 这一语法糖,使异步代码更清晰易读。还介绍了多个异步任务的组合处理方式,如 Promise.all 与 Promise.race。掌握这些内容,将大幅提升你的异步编程能力,写出更优雅、易维护的代码,助力开发与面试!
169 0
一文吃透 Promise 与 async/await,异步编程也能如此简单!建议收藏!
react-Native init初始化项目报错”TypeError: cli.init is not a function“
react-Native init初始化项目报错”TypeError: cli.init is not a function“
1228 1
|
12月前
|
JavaScript
在Vue中获取DOM元素的实际宽高
【10月更文挑战第2天】
1157 76
|
JavaScript 网络协议 Java
理解websocket实现原理
WebSocket是实现高效双向实时通信的协议,通过握手阶段和特定数据帧格式突破HTTP限制,降低延迟。在项目中使用WebSocket,通常涉及选择库(如`ws`、`Java-WebSocket`、`Socket.IO`),创建服务器监听连接和处理消息,以及在客户端建立连接并收发消息。WebSocket适用于聊天、游戏、协同编辑等场景。示例代码展示了使用Node.js和`ws`库创建WebSocket服务器的基本步骤。
620 95
screenfull全屏、退出全屏、指定元素全屏的使用步骤
screenfull全屏、退出全屏、指定元素全屏的使用步骤
838 5
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示
循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示
|
存储 缓存 前端开发
灵魂拷问-前端的作用--性能优化篇
作者最近在尝试对负责的平台进行性能优化,本文整理了些前端性能优化的一些常见策略。
|
JavaScript 编译器 开发者
TypeScript中的类型推断机制:原理与实践
【4月更文挑战第23天】TypeScript的类型推断简化编码,提高代码可读性。编译器基于变量初始值或上下文推断类型,若新值不兼容则报错。文章深入探讨了类型推断原理和实践,包括基本类型、数组、函数参数与返回值、对象类型的推断,并提醒注意类型推断的限制,如非万能、类型兼容性和适度显式指定类型。了解这些能帮助更好地使用TypeScript。
|
JavaScript 安全 前端开发
TypeScript 基础学习笔记:interface 与 type 的异同
TypeScript 基础学习笔记:interface 与 type 的异同
266 0
|
前端开发 JavaScript UED
前端 js 经典:async 和 await
前端 js 经典:async 和 await
380 2