为了账号安全,请及时绑定邮箱和手机立即绑定

ES5 map循环一大坑:循环遍历竟然出现逗号!

一、map

5bddb53d00015bd802000200.jpg    

map大法好

作为当今程序界最好用的循环方法之一map, 在我的项目里基本替代了for循环

map循环常用的一些方法

/********* ES6 **********///一行代码可以省略returnarray.map( item => console.log(item))   
=>
array.map( item => {    return console.log(item)
})//多行代码需要{}array.map( item => {    //do someting  花括号一般是处理某些逻辑})//返回组件array.mao( item => (    <div>{item}</div>   //这种比较常出现在react的jsx))

上面总结了一些我经常用的map方法

下面我就要小小批评一下map的坑爹之处...

当用map循环遍历元素的时候, 会出现多余的逗号,

虽然对于单页面应用开发基本遇不上. 但还是做一个记录.防止日后落坑

二、测试案例

为了生动形象说明一下问题, 我分别循环遍历四张图片和四个文字, 且看

//js<script>
    //歌曲url.聪明的你会发现这个路径有点奇怪...
    let imgArr = ['./yaba.jpg', './siwujidan.jpg', './motiandalou.jpg', './nashini.jpg', ]     
    
    //歌曲名字
    let titleArr = ['哑巴', '肆无忌惮', '摩天大楼', '那是你离开了北京的生活']    let imghtml = ''    //输出img
    let titlehtml = ''  //输出title
    
    imghtml += arrobj.map(function(item){        return '<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + item + '" style="width: 350px"/>'
    })

    titlehtml += name.map(function(item){        return '<div>' + item + '</div>'
    })    document.getElementById('output').innerHTML = imghtml    document.getElementById('output').innerHTML += titlehtml</script>//html<div id="output"></div>

我们看一下输出的效果:

5bddb53d0001a2ba08310410.jpg

嘿嘿嘿, 果然出来了。

对于react里面直接return这个dom也是一样会出现这种情况的.

三、KO Bug

我们可以思考一下为什么会出现这个烦人的,呢?

原来:

利用map插入到DOM时 map最终返回的数组因为拼接+=调用了toString方法. 数组结构[1, 2, 3] 里面居然是这个逗号, 转换的时候把它带上了!

我们知道了原因之后就非常方便解决了。我们可以巧妙地利用join方法:join()可以切开一个数组, 指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

嘻嘻。明白了!我只要改成这样!

imghtml += arrobj.map(function(item){    return '<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + item + '" style="width: 200px"/>'}).join('')

titlehtml += name.map(function(item){    return '<div>' + item + '</div>'}).join('')

大功告成!但是要注意记得不要附带参数哦!不然可恶的,就会变成你传入的参数啦!

imghtml += arrobj.map(function(item){    return '<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + item + '" style="width: 200px"/>'}).join('***')

5bddb53e00017f8d08910387.jpg

原文出处:https://www.cnblogs.com/soyxiaobi/p/9898762.html  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消