if (!r) { r = []; }中,!r是怎么理解?

天崩地裂金刚不坏 2016-07-01 10:07:53
function flatten(a, r) {
if (!r) {
r = [];
}
for (var i = 0; i < a.length; i++) {
if (a[i].constructor == Array) {
flatten(a[i], r);
} else {
r.push(a[i]);
}
}
return r;
}
flatten([[1, 2],[3, 4, 5], [6, 7, 8, 9,[11,12,[12,13,[14]]]],10]);
// =>[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
...全文
223 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cq-wangyong 2016-07-01
  • 打赏
  • 举报
回复
我心已碎。。。。。
  • 打赏
  • 举报
回复
谢谢你真棒。。
cq-wangyong 2016-07-01
  • 打赏
  • 举报
回复
if()else{} 其中的if语句是判断当前元素是否为一个数组,如果是继续调用本身,如果不是数组则将当前元素放入r数组中;例如:var s=[[1,2],3],执行的时候第一个元素是[1,2],判断是一个数组,调用本身把数组[1,2]档参数传进去,执行for循环,判断元素1,不是数组就会去执行else
  • 打赏
  • 举报
回复
引用 2 楼 baidu_31333625 的回复:
能不能解释下这个函数的意思。他重载那块。else那不太理解
递归的时候,到最后,会出现一个一维数组,然后执行else是吧
cq-wangyong 2016-07-01
  • 打赏
  • 举报
回复
还有个未定义也是false
cq-wangyong 2016-07-01
  • 打赏
  • 举报
回复
if()语句需要的是boolean类型的值,如果不是系统会自动转换,但是只有数字0,null和空字符串''这三个值在转换的时候会是false,其他的转换都是true;你这是想把数组转换为字符串的话直接用Array.join(',')这个方法;如果是想得到一维数组那就再调用字符串的Str.split(',')方法;例如:var array=[[1, 2],[3, 4, 5], [6, 7, 8, 9,[11,12,[12,13,[14]]]] ;var array2=array.join(',').split(',')
functionsub 2016-07-01
  • 打赏
  • 举报
回复
function flatten(a, r) {
    if (!r) {
        r = []; // 如果没有传入第二个参数就将r设置成[]
    }
    for (var i = 0; i < a.length; i++) {
        if (a[i].constructor == Array) {// 如果当前元素为数组,则递归调用本方法,将r当做第二个参数传进
            flatten(a[i], r);
        } else {
            r.push(a[i]);// 如果不是数组,直接推入r中
        }
    }
    return r;
}
这个函数就是把多维数组转换成一维数组。
  • 打赏
  • 举报
回复
能不能解释下这个函数的意思。他重载那块。else那不太理解
functionsub 2016-07-01
  • 打赏
  • 举报
回复
如果没传第二个参数,则将第二个参数直接设置成一个空数组。

87,917

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧