input :
apples, pears # and bananas
grapes
bananas !apples
output
apples, 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",["#","!"]);
因为你改的是参数值啊,而且你可以把参数值给重写覆盖掉了。为什么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 "]