js-基础-Array

news/2024/10/22 13:31:17/

数组是一种特殊的对象, 是有顺序的 [{},{}] 对象数组 它的索引值最大是2^32 -1

创建数组

var arr = new Array(1, 2); // bad
但有时用来初始化一定长度的数组. new Array(10)
var arr = [1, 2]; // good 字面量let arr = [a, a + 1, a + 2] 可以是表达式: (返回值的式子,三目, 单目, 逻辑, 函数执行...)
二维数组.[,,].lengtharr[0]  // 取值Array.of() 用来解决 new Array() 无法创建一个元素的数组 => es6加的工厂方法 

浅拷贝数组 … and Array.from()

用于可迭代对象, 和 { }

es6加的工厂方法
Array.from()  相当于 [...'abc']
Array.from({}, (i) => i + 1) 
Array.from([2,4], (i)=> i * 2) // [4, 8]

in 和 稀疏数组

let a1 = [,];a1.length 1
let a1 = [,,];a1.length 2
[1,,3].length  => 3
0 in a1  false
0 in ['a'] truedelete arr[2] delete不会修改数组的length ... 有什么应用场景???

数组的属性

arr.length = 0; // 返回值是数字, 清空数组, 那为啥不直接赋值 []?
let arr = ['a', 'b', 'c'] 
arr.length = 1;

迭代

forEach()  能感知稀疏数组, 不会对没有的元素调用...for of 则不能
for(let [index, item] of arr.entries()){}
老式for 循环 
for(let i = 0; i < arr.length; i++) {} // 实际上只读取一次arr.length
for(let i = 0, len = arr.length; i < len; i++) {}
for(let i = arr.length - 1; i >= 0; i--) {if(xx) continue
} 

改变原数组7个方法

let arr = [];
arr.push('c','d') 新数组的长度 => 2 
arr.pop() // 'd'
arr.unshift('a', 'b')  // 3
arr.shift() // 'a'
arr.shift() // 'b'
arr.shift() // 'c'
arr.shift() // undefinedlet arr2 = ['a', 'b', 'c']; arr2.reverce(); // ['c', 'b', 'a']
arr2.splice(1, 1, 'd', 'e', 'f') // ['b']  splice 粘接
arr2.sort((a, b) => a - b ) // sort 排序

不影响原数组的3个方法

方法描述
slice(startIndex, endIndex)返回截取的数组 可以为负数
arr1.concat([‘a’]) arr1.concat(‘a’)拼接
join() join(‘’)区别[null,undefined,‘a’].join(‘’) // ‘a’

其他方法

方法描述
indexOf lastIndexOf不能判断NaN, 字符串也有这个方法
forEach无返回值,不能break中断. 不需要return 下面的需要 (item, index, arr)
filter过滤, 可以链式… 第二个参数改变this 指向
map映射 map第二个参数 改变this指向
arr.fill(‘a’, 0, 3)arr 要有长度才行!!
index in arr返回boolean (用得很少…因为是判断index)
arr.includes(‘a’)// 同上
Array.isArray(arr)// 同上
some/every // 同上
for(let i in arr) { }// i为 index
entries() keys() values()
compyWithin()
flat() flatMap()
at()

js-数组方法reduce-到底要不要传第二个参数


因为

[].reduce((x, y) => {}) 报错
[3].reduce((x, y) => x + y) 预期3, 实际返回值是 [3]

arr.reduce((x, y) => x.b + y.b, { b: 0 }) 项目中可能会这么写
console.log(a.reduce((x, y) => x + y))
console.log(a.reduce((x, y) => x * y))
console.log(a.reduce((x, y) => (x > y ? x : y)))[2, 3, 4].reduceRight((x, y) => {return Math.pow(x, y)
})
  1. forEach不能退出 (i, index, array)

map 要 有返回值.

console.log([1, 2, 3].map((i) => i * 2))  [2, 4, 6]
console.log([{ id: 1 }, { id: 2 }].map((i) => i.id)) [1, 2]

filter 根据boolean 过滤, false 的被过滤掉

arr.filter((x) => x < 3)
arr.filter((x) => i % 2 === 0)
arr.filter(() => true) 过滤稀疏数组
[undefined, null, 3].filter((i) => i !== undefined && i !== null)  [3]

find findIndex

arr.find(i => i.id === xxx)  找不的话返回undefined
arr.findIndex(i => i.id===xxx) 找不到返回-1

every 很坑

数学传统?
[].every((i) => i > 100) 因为空数组的时候, 回调并不会执行, 且返回 true
[].some((i) => i > 100) 空数组的时候, 也不会执行, 但是返回的是false

flat flatMap

es2019的方法
arr.flat() 不传的话默认一层
let arr = [1, [2, [3, [4]]]]
console.log(arr.flat())  [1, 2, Array(2)]
console.log(arr.flat(1)) [1, 2, Array(2)]
console.log(arr.flat(2)) [1, 2, 3, Array(1)]
console.log(arr.flat(3)) [1, 2, 3, 4]
console.log(arr.flat(4)) [1, 2, 3, 4]
flatMap 先map 完了 flat
['hellow world', 'the definitive guide'].flatMap(i => i.split(' ')) ['hellow', 'world', 'the', 'definitive', 'guide']
[-2, 2, [], []].flatMap(i => i)   [-2, 2]
[-2, 2].flatMap((i) => (i < 0 ? [] : Math.sqrt(i))) [1.4142135623730951]

concat 拼接 不改变原数组

[1].concat(2)  [1, 2]
[1].concat([2])  [1, 2] 它会打平一次数组....
[1].concat(2,3,[4,[5]]) [1, 2, 3, 4, Array(1)]

参考资料

  1. Array 对象 - JavaScript 教程 - 网道 (wangdoc.com)
  2. 数组的扩展 - ECMAScript 6入门 (ruanyifeng.com)
  3. javascript权威指南(第四版)

http://www.ppmy.cn/news/555781.html

相关文章

2023.6.21AgentGPT部署

在云服务器上使用Docker部署AgentGPT 需要自行提供OpenAI的API Key https://platform.openai.com/account/api-keys 需要自行提供云服务器或者虚拟机 需要自行解决网络的问题&#xff0c;本文中使用的是小喵咪解决网络的问题【需要订阅地址】 文章目录 在云服务器上使用Docker…

基于java+swing+mysql商城购物系统

基于javaswingmysql商城购物系统 一、系统介绍二、功能展示1.项目骨架2.主界面3.用户登陆4.添加商品类别5、添加商品6、商品管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java SE项目 项目名称&#xff1a;商城购物系统 用户类型&#xff1a;双…

Android开发网上的一些重要知识点

1. android单实例运行方法 我们都知道Android平台没有任务管理器&#xff0c;而内部App维护者一个Activity history stack来实现窗口显示和销毁&#xff0c;对于常规从快捷方式运行来看都是startActivity可能会使用FLAG_ACTIVITY_NEW_TASK标记来打开一个新窗口&#xff0c;比如…

全国省市县无刷新多级联动菜单

全国省市县无刷新多级联动菜单 <html> <head> <title>省市县关联菜单</title> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <style> body,select { font-size:9pt; font-family:Verdana; } a…

2014年880个合集Android_实例子源代码文件下载地址合集-2014

*************************************************************************************************** 优质Android 源码现有各类源码接近6000套&#xff0c;视频教程100套&#xff0c;主要涉及.net网站、软件与安卓系列源码&#xff0c; 每套源码都已经经过测试&#xff0…

安卓资料收集三

一、 基础篇 需要掌握的技能如下&#xff1a; 1、熟练掌握基本控件以及容器控件的使用 &#xff1b; 常用的基本控件有&#xff1a;Button 、TextView、EditText、ListView等 常用的容器控件有&#xff1a;FrameLayout、LinearLayout、RelativeLayout等 2、熟练掌握相关监听器的…

android源码集合989个实例 (从网上摘抄,在此记录下)

需要批量打包下载请联系QQ&#xff1a;50841662 ├—地图相关 Android bikeroute自行车导航源码.rar: http://www.t00y.com/file/64335654 Android Gps Test源码.rar: http://www.t00y.com/file/64335659 Android GpsTracker源码.rar: http://www.t00y.com/file/6433566…

第一期 android源码集合987个实例(从网上摘抄,在此记录下)

├—地图相关 Android bikeroute自行车导航源码.rar: http://www.t00y.com/file/64335654 Android Gps Test源码.rar: http://www.t00y.com/file/64335659 Android GpsTracker源码.rar: http://www.t00y.com/file/64335662 Android 百度地图 API-定位周边搜索POI源码.…