如何修复Javascript中的“ TypeError:arr.map不是函数”错误

时间:2019-06-25 23:38:43

标签: javascript arrays mapping

我正在向Hackerrank挑战“ Manasa and Stones”

我已经完成了Looping解决方案,但是解决树级别花费了很多时间,我想我需要一个递归解决方案。

function stones(n, a, b) {


    var arr = [0,0];
    var rresult = recursive(0,a,b,arr,n)

    return rresult;
}
function recursive(n,a,b,arr,end){
    if (n == end){ return arr }
    else {
        let arr2 = arr.map(function(x) {
   return x * 2;
});
        arr = arr.map(function(x) {
   return x * 2;
});
        arr = arr.join(arr2)
        recursive(n,a,b,arr,end)
    }

}

解决https://www.hackerrank.com/contests/microverse-coding-challenges/challenges/manasa-and-stones/problem应该可以正常工作(我不希望您做一个解决方案,我需要知道为什么我的问题在那里*没有意义)

我所有的代码=> https://github.com/Macatuz/MHackerrankSamples/blob/master/Manasa_and_Stones.js

1 个答案:

答案 0 :(得分:2)

arr = arr.join(arr2)并没有按照您认为的那样做-.join方法将数组中的元素连接到由参数分隔的字符串中。当您将此字符串arr传递到递归函数调用中时,您会在下一个堆栈帧上崩溃,因为字符串没有map函数。

您可能是说.concat,它将参数数组中的元素放在实例数组的后面。这是一个片段,说明发生了什么。

const arr1 = ["apples", "bananas"];
const arr2 = ["celery", "asparagus"];

const joined = arr1.join(arr2);
const concatted = arr1.concat(arr2);

console.log(joined, typeof joined);  // whoops?
console.log(concatted);              // ah. much better.

请注意,这只会解决标题中的查询,而不会产生解决挑战的有效代码-这是读者的练习。