javascript - 传递给函数的数组是未定义的

标签 javascript arrays

我想增强合并排序算法,以便它对两个数组进行排序并删除重复项。 我想出了以下代码:

function mergeSortEnhanced(arr, arr2)
{
    while(arr2.length)
     {
        arr.push(arr2.shift());
     }
    if (arr.length < 2)
        return arr;

    var middle = parseInt(arr.length / 2);
    var left   = arr.slice(0, middle);
    var right  = arr.slice(middle, arr.length);

    return merge(mergeSortEnhanced(left), mergeSortEnhanced(right));
}

function merge(left, right)
{
    var result = [];

    while (left.length && right.length) {
        if (left[0] < right[0])
        {
            result.push(left.shift());
        } 
        else if(left[0] > right[0])
        {
            result.push(right.shift());
        }
        else
        {
            result.push(left.shift());
            right.shift()
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());

    return result;
}
var a = [1, 2 , 2 , 1];
var b = [1, 1, 6 ,8];
console.log(mergeSortEnhanced(a, b).join());

问题是我在第四行遇到错误

while(arr2.length)

这表明编译器无法计算未定义的长度。我不明白为什么第二个数组在函数内部未定义以及如何修复它

最佳答案

问题出在

return merge(mergeSortEnhanced(left), mergeSortEnhanced(right));

你在这里只传递函数的第一个参数,因此第二个参数是未定义的。 也许你想做

    return merge(left, right);

顺便说一句,作为一个建议——对递归要格外小心

关于javascript - 传递给函数的数组是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39530147/

相关文章:

javascript - 如何隐藏和显示html输入文本和段落

java - 使用多个索引对 String[] 的 ArrayList 进行排序

Python 在 Ruby 中的枚举?

javascript - 使用javascript在表中添加更多行

javascript - 在javascript中重新定义数组推送方法?

javascript - 如何在React Native中完全关闭应用程序后保留应用程序的内存

javascript - jQuery $.get 将 PHP 代码作为文本而不是值返回

c++ - .begin() 和 .end() 的意义何在?

空指针的 C 动态数组

javascript - 分割汉字