一日客语:中文:早安 客语:anˋzoˋ安走
前提:在学习Array.methods时会想知道他是如何迭代Array内的元素,才知道会有这一些稍微不同的迭代差异。
find、filter会迭代array,像是这样:
let a = ['apple', , , 'egg'];
a.find(function (value, index, array) {
console.log('index:', index);
console.log('value:', value);
console.log('array:', array);
});
//结果
//index: 0
//value: apple
//array: [ 'apple', <2 empty items>, 'egg' ]
//index: 1
//value: undefined
//array: [ 'apple', <2 empty items>, 'egg' ]
//index: 2
//value: undefined
//array: [ 'apple', <2 empty items>, 'egg' ]
//index: 3
//value: egg
//array: [ 'apple', <2 empty items>, 'egg' ]
会把array元素一个个带进function
a = [0, 1, 2, 3, 4, 5, 6]
有想过在把a[4]元素带进CallBack function 的时候把後面元素删掉会发生什麽事吗?
执行方式:a[4]带入callBack function 带入时把a[5]元素删除
let a = [0, 1, 2, 3, 4, 5, 6];
a.find(function (value, index) {
console.log('index:', index, 'value:', value);
if (index == 4) {
delete a[5];
}
});
//结果
//index: 0 value: 0
//index: 1 value: 1
//index: 2 value: 2
//index: 3 value: 3
//index: 4 value: 4
//index: 5 value: undefined
//index: 6 value: 6
把元素迭代进function 事前会先把array.length长度算好,知道跑几次
就算把最後一个元素删除也是这样情况
let a = [0, 1, 2, 3, 4, 5, 6];
a.find(function (value, index) {
console.log('index:', index, 'value:', value);
if (index == 5) {
delete a[6];
}
});
//index: 0 value: 0
//index: 1 value: 1
//index: 2 value: 2
//index: 3 value: 3
//index: 4 value: 4
//index: 5 value: 5
//index: 6 value: undefined
因为一开始迭代长度已经算好,迭代时仍会找6
会发现filter的index居然没有6!!和find不一样结果
let a = [0, 1, 2, 3, 4, 5, 6];
a.filter(function (value, index) {
console.log('index:', index, 'value:', value);
if (index == 5) {
delete a[6];
}
});
//index: 0 value: 0
//index: 1 value: 1
//index: 2 value: 2
//index: 3 value: 3
//index: 4 value: 4
//index: 5 value: 5
因此看一下ECMA 如何定义
ECMA 比较图:
演算法中filter方法多了HasProperty的确认机制,在find方法不会确认key为6的值存不存在而filter方法会~
像是map、reduce、forEach等常见方法也会确认HasProperty
不过在迭代时delete自己的property应该很少人这样使用,所以我自己把这个当作一个小小小小小的的知识
更详细Array methods 使用方式可以看看队友写的:
传送门
就决定是你了 - 阵列系列I
就决定是你了 - 阵列系列 II
就决定是你了 - 阵列系列III
感谢大神!
Cathy大大的神来之手 CathyShen-网页阿尼尛,到底是在干尛?
资料参考:
ECMA262
<<: Youtube Analytics API 教学 - OAuth2.0 开放授权 (2)
>>: D3JsDay16 It's map birth,It's from path—生成地图
前言 这篇蛮有趣的,适合senior以上,对组织各种不满,希望自己能帮助组织改变的人来看看。 演讲...
VS CODE安装好之後,就可以来认识HTML啦~ 开始写HTML前的步骤 首先,在桌面上新增一个资...
那个行动装置 虽然我们都概括说是手机版,但 Media Query 其实支援更多装置的呈现,只是,应...
使用 mv 来更改档案名称 mv test1.txt test2.txt 使用 mv 来移动整个资料...
在实习稽核阶段,如果没有导入经验或是稽核经验的时候,往往会非常吃亏。 (1) 无法从受稽方导入资讯...