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

完成一个函数,输入字符串和注释规则数组,剔除注释规则后返回字符串

完成一个函数,输入字符串和注释规则数组,剔除注释规则后返回字符串

料青山看我应如是 2018-08-04 05:51:38
input :apples, pears # and bananasgrapesbananas !applesoutputapples, pears grapes bananas var result = solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"])// result should == "apples, pears\n grapes\n bananas"我是这样写的,哪里不对了,还有更好的方法也行function solution(input, markers){ var test= input.split("\n"); var len=markers.length ,strlen=test.length;   for(var i=0;i<len;i++){        test.forEach(function(item){         var item=item.split(markers[i])[0];                console.log(item);             return item;                           })         console.log(test); //这里为什么返回后的test数组没有改变,我觉得第一次应该返回去除#的数组啊,哪里错了?} } solution("apples, pears # and bananas\ngrapes\nbananas !apples",["#","!"]);
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

因为你改的是参数值啊,而且你可以把参数值给重写覆盖掉了。为什么test数据没有改变,请参阅这个:js 中参数是按值传递的,但声明对象时又是引用指向某个对象的,该怎么理解?

代码修正,很简单,把你的forEach换成map就行了,而且注意你的原代码里item既是参数,又被你var了一次,小小的细节请注意,coding坏习惯要改:

function solution(input, markers){

    var test= input.split("\n");

    var len=markers.length ,strlen=test.length;

    for(var i=0;i<len;i++){

        test = test.map(function(item){

            return item.split(markers[i])[0];

        });

    }

    return test;

}

console.log(solution("apples, pears # and bananas\ngrapes\nbananas !apples",["#","!"]))//["apples, pears ", "grapes", "bananas "]


查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信