八股神话-后羿射日-es6的各种数组操作

90 阅读7分钟

传说古时候,天空曾有十个太阳,他们都是东方天帝的儿子。这十个太阳跟他们的母亲、天帝的妻子共同住在东海边上。她经常把十个孩子放在世界最东边的东海洗澡。洗完澡后,让他们像小鸟那样栖息在一棵大树上。因为每个太阳的形象中心都是只鸟,所以大树就成了他们的家,九个太阳栖息在长得较矮的树枝上,另一个太阳则栖息在树梢上。当黎明需要晨光来临时,栖息在树梢的太阳便坐着两轮车,穿越天空,照射人间,把光和热洒遍世界的每个角落。十个太阳每天一换,轮流当值,秩序井然,天地万物一片和谐。人们在大地上生活得非常幸福和睦。人和人像邻居、朋友那样,生活在一起,日出而耕,日落而息,生活过得既美满又幸福。人和动物也能和睦相处。那时候人们感恩于太阳给他们带来了时辰、光明和欢乐,经常面向天空磕头作揖,顶礼膜拜。

可是,这样的日子过长了,这十个太阳就觉得无聊,他们想要一起周游天空,觉得肯定很有趣。于是,当黎明来临时,十个太阳一起爬上双轮车,踏上了穿越天空的征程。这一下,大地上的人和万物就受不了了。十个太阳像十个大火团,他们一起放出的热量烤焦了大地,烧死许许多多的人和动物。森林着火啦,所有的树木庄稼和房子都被烧成了灰烬。那些在大火中没有烧死的人和动物,猪突狼奔,四下流窜,发疯似地寻找可以躲避灾难的地方和能救命的水和食物。

河流干枯了,大海也面临干涸,所有的鱼类也死光了,水中的怪物便爬上岸偷窃食物。农作物和果园枯萎烧焦,供给人和家畜的食物源断绝了。人们不是被太阳的高温活活烧死就是成了野兽口中食。人们在火海灾难中苦苦挣扎,祈求上苍的恩赐!这时,有个年轻英俊的英雄大神叫后羿,他是个神射手,箭法超群,百发百中。他被天帝召唤去,领受了驱赶太阳的使命。他看到人们生活在火难中,心中十分不忍,便暗下决心射掉那多余的九个太阳,帮助人们脱离苦海。

于是,后羿翻过了九十九座高山,穿过九十九片荒漠,来到了东海边,登上了一座大山,山脚下就是茫茫的大海。


后羿拉开了万斤力弓弩,搭上千斤重利箭,

瞄准了第一个太阳Array.indexOf(item)

它象征着:找到item在Array数组中的位置,

作用是:返回item在Array数组中的索引,如果没找到,则返回-1。

[3,2,1].indexOf(1)
// 1

[3,2,1].indexOf(5) 
// -1

嗖地一箭射去,吧唧,大哥掉落下来了。

见到大哥的陨落,剩余的太阳很是生气,灼烧大地的火势不明的变大了,二哥低沉:“何人,胆敢...”


没等它说完,后羿又拉开弓弩,搭上利箭,

瞄准了第二个太阳Array.includes(item)

它象征着:Array数组中是否存在item,

作用是:如果存在,则返回true,如果不存在则返回false。

[3,2,1].includes(1)
// true

[3,2,1].indexOf(5) 
// false

嗖地一箭射去,吧唧,二哥还没反应过来,就掉落下来了。

十弟见情况不妙,默默躲在各位哥哥的身后。


天上还有八个太阳瞪着红彤彤的眼睛。后羿觉得这些太阳仍很焦热,

后羿再次拉开弓弩,搭上利箭,

瞄准了第三个太阳Array.filter((item) => { return true/false })

它象征着:过滤Array中的item,返回一个新数组,

作用是:遍历Array的所有item,将所有符合指定条件的item组成新数组,然后返回它。

[{value: 3}, {value: 2}, {value: 1}].filter((item) => { 
    return item.value !== 1
})
// [{value: 3}, {value: 2}]

嗖地一箭射去,吧唧,三哥掉落下来了,砸在了二哥的身上,没了光芒。

三箭下去,其他的太阳被吓尿了,纷纷逃散,然后后羿可没打算放过它们,


他再一次拉开弓弩,搭上利箭,

瞄准了第四个太阳Array.find((item) => { return true/false })

它象征着:在Array中找到符合指定条件的第一个item,

作用是:遍历Array的所有item,直到找到第一个符合指定条件的item,返回它。

[{value: 3}, {value: 2}, {value: 1}].find((item) => { 
    return item.value !== 1
})
// {value: 3}

嗖地一箭射去,吧唧,五哥刚想扭头就跑,发现先它一步的四哥,掉落下来了。

五哥慌了,扑腾扑腾地(太阳是三足乌),也不管姿势优不优雅,往东边飞去。


后羿轻哼了一声,

闭上眼睛,拉开弓弩,搭上利箭,

瞄准了第五个太阳Array.some((item) => { return true/false})

他象征着:如果Array中有符合指定条件的item,则返回true,

作用是:遍历Array,如果找到第一个符合指定条件的item,则返回true,否则返回false。

[{value: 3}, {value: 2}, {value: 1}].some((item) => { 
    return item.value !== 1
})
// true

[{value: 3}, {value: 2}, {value: 1}].some((item) => { 
    return item.value === 4
})
// false

二哥Array.includes(item)只能判断Array的所有item中是否有与传入的item相同的,

五哥Array.some((item) => { return true/false})却可以判断Array的所有item中是否有符合指定条件的,

嗖地一箭射去,吧唧,五哥无啦,简简单单。


来点高难度的操作,

后羿把弓箭背在了肩上,抽出一支箭,手握箭身,

瞄准了第六个太阳Array.map((item)=>{ return newItem })

他象征着:复制一份对Array的每一个item二次处理完的数组,

作用是:遍历Array,根据每一个item去生成新的newItem,放入新数组,并返回。

[{value: 3},{value: 2},{value: 1}].map((item) => { 
    return {newVal: item.value + 1}
})
// [{newVal: 4}, {newVal: 3}, {newVal: 2}]

手臂用力一甩,利箭如同流星一般飞出,吧唧,我起了,一箭秒了,有什么好说的。


“六哥”,七哥撕声呐喊着,平时它和六哥玩的最好。

七哥红着眼,往后裔所处的山上冲刺,

第七个太阳Array.reduce((total,item) => { return 操作}, total的原始值)

他象征着:reduce一般用法是累加器,但其实不止这用法,还可以将filter和map的功能结合起来(filter只能过滤,不能对item做处理生成newItem,map只能对item处理生成newItem,却不能过滤)。

[{value: 3}, {value: 2}, {value: 1}].reduce((total, item) => { 
    return total + item.value
}, 0)
// 6

[{value: 3}, {value: 2}, {value: 1}].reduce((arr, item)=>{ 
    if(item.value !== 1) {
        return arr.concat({value: item.value + 1})
    }else {
        return arr
    }
}, [])
// [{ value: 4 }, { value: 3 }]

后裔手握弓弩,对准七哥,砸了过去,吧唧,

不愧是能拉动上万斤弓弩的人,光是蛮力就能击杀三足乌。

剩下三只太阳了,有一只躲在后面,前面两只长得好像啊!


后羿拉开弓弩,搭上利箭, 瞄准了第八个太阳

for (const item of array) { console.log(item); }

它象征着:遍历Array的每一个值,

作用是:一般用于遍历数组。

let array = [3,2,1]
for (const item of array) {
  console.log(item);
}
// 3 2 1

嗖地一箭射去,吧唧,八哥无啦。


后羿拉开弓弩,搭上利箭,

瞄准了第九个太阳

for (const prop in obj) { console.log(prop); }

它象征着:遍历Object的非继承来的属性,

作用是:遍历Object的非继承来的属性,对于一个对象,他拥有从js内置的Object对象中继承来的属性,比如toString,hasOwnProperty等,这些是不会被遍历的,即不可被枚举的。

let obj = {a: 1, b: 2, c: 3}
console.log(obj.toString);
for (const prop in obj) {
    console.log(prop);
}
// [Function: toString]
// a b c

嗖地一箭射去,吧唧,九哥也无啦。


只剩下一个太阳,

for (let i = 0; i < array.length; i++) { }

他怕极了,就按照后羿的吩咐,老老实实地为大地和万物继续贡献光和热。

for循环yyds。

从此,这个太阳每天从东方的海边升起,晚上从西边山上落下,温暖着人间,保持万物生存,人们安居乐业。