[重学前端基础] Javascript之数组

前言

数组在业务中很经常使用,这篇写写在业务中常常涉及到的一些关于数组的技术点。数组

数组经常使用方法

学习数组考虑三个方面:是否改变自身、返回值、回调函数返回值数据结构

Es5:

改变数组自身:pop、push、shift、unshift、splice、sort、reverse函数

不改变数组自身:reduce、slice、indexOf...学习

reduce:this

reduce回调函数中包含4个参数:累积值、当前值、当前索引、原数组;
回调函数返回的是当前循环的累积值;
函数返回的是总的结果;
当不提供初始值时,累积值会将数组第一个值看成值,当前值会将数组第二个值看成值。spa

应用场景:须要进行累积计算的场景prototype

Es6:

includes、find、from、of...code

image.png

find:
找到中止循环,回调函数返回true,find返回找到的值;找不到回调函数返回false,find返回undefined。对象

from:
将伪数组对象或可迭代对象转化成数组;
from有3个参数:想要转换成数组的伪数组对象或可迭代对象、每一个元素会执行的回调函数(可选)、执行回调函数mapFnthis对象;
返回新数组。blog

可迭代对象(部署了Iterator接口的数据结构): Set、 Map...

伪数组: 有length属性的对象(arguments、{length: 3}...)。

数组的初始化

* var arr = []; arr.length = 8;
* new Array(8)
* Array.from({length: 8})
* arr[8] = null

image.png

image.png

image.png

以上获得的新数组数组长度都为8

image.png

经过下标指定的数组,数组长度为9

数组/对象的遍历

for、for...of、for...in、forEach、map

for...in遍历数组:

数组索引数字会变为字符串

会遍历数组的私有属性

let arr = ['you','uu','tt']
arr.b = 'haha'
<!--for(let i=0; i<arr.length; i++) {-->
<!--    console.log(arr[i])-->
<!--}-->

for(let key in arr) {
    console.log(key,arr[key])
}

类数组转化成数组的两种方法

//Es5写法
Array.prototype.slice.call(arguments)
//Es6写法
Array.from(arguments)

数组特色

索引值不存在当前数组中的状况:

一、数组经过数字进行索引,直接经过指定索引设置数组值会改变数组长度。

二、索引能够是字符串,索引若是能够强制转化成十进制数字,那么就能够计算在数组长度中,不然不能够

let a = [];
a[1] = 2
a.length //2
a['foobar'] = 'youyi'
a.foobar //'youyi'
a.length//2
let b = []
b["14"] = 34
console.log(b.length) //15

数组相关题目练习

一、 {1:123, 2:231, 5:888} 转化为 [123, 231, null, null, 888, null, null, null]

function objectToArr(obj,len) {
 
 let arr = [];

 for(let key in obj) {
    arr[key-1] = obj[key]
 }

  if(len)  arr.length = len;
  arr = Array.from(arr, function(v, i) {return v || null})
  
   return arr
}

console.log(objectToArr({1:123, 2:231, 5:888}, 8))

//[123, 231, null, null, 888, null, null, null]

更聪明简洁的写法:

function objectToArr(obj,len) {
 
  return Array.from({length: len}, function(v, i) {
     return obj[i+1] || null
  })
}

console.log(objectToArr({1:123, 2:231, 5:888}, 8))

参考资料

几个关于js数组方法reduce的经典片断

相关文章
相关标签/搜索