Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JS循环不返回preudo代码的所有结果?_Javascript - Fatal编程技术网

Javascript 为什么JS循环不返回preudo代码的所有结果?

Javascript 为什么JS循环不返回preudo代码的所有结果?,javascript,Javascript,我尝试在JS中实现伪代码: function merge(sea, fresh) result ← List.new while not (sea.empty and fresh.empty) if sea.top_item > fresh.top_item fish ← sea.remove_top_item else fish ← fresh.remove_top_item result.append(fish) return result JS函数应该合并两个数组:

我尝试在JS中实现伪代码:

function merge(sea, fresh)
 result ← List.new
 while not (sea.empty and fresh.empty)
 if sea.top_item > fresh.top_item
 fish ← sea.remove_top_item
 else
 fish ← fresh.remove_top_item
 result.append(fish)
return result
JS函数应该合并两个数组:

let list1 = [1, 2, 3, 4];
let list2 = [10, 11, 15];

function merge(list1: any, list2: any[]) { 
    let result = [];

    while (list1.length && list2.length) {
        let fish; // temp variable
        if (list1[0] > list2[0]) { 
            fish = list1.shift(); // get always greatest element
        } else { 
         fish = list2.shift();
        }

        result.push(fish);
    }    

    return result; // Return result
}
电话:

console.log(merge(list1, list2));
显然,我得到的结果是:
[10,11,15]

 [1,2,3,4, 10, 11, 15]
我的错在哪里


对于这种合并,有必要查看两个数组的
长度。在您的示例中:当其中一个数组结束时,您停止合并

var列表1=[1,2,3,4];
var list2=[10,11,15];
var ers=merge(列表1、列表2)
控制台日志(ers);
函数合并(sea,fresh){
让结果=[];
而(sea.length>0 | | fresh.length>0){///OR在这里非常重要,因此如果一个数组结束,我们将继续查找第二个数组
let fish;//临时变量
让i1;
让i2;
如果(海长>0){
i1=海[0];
}
如果(fresh.length>0){
i2=新鲜[0];
}
如果((i1!=未定义&&i1}
您的示例中的
list1
值永远无法通过
if(list1[0]>list2[0])
条件,因为它们中的每一个都比
list2
中的值小,是的,我知道,但我在《计算机科学》一书中找到了这个例子,并试图在JSWell中重现,在你的问题中,你说这个函数应该合并数组,但它没有这样做——它返回最大元素的新数组(有点)。所以你想合并两个数组还是想得到最大的元素?书上怎么说?如果你想合并它们,只需使用书中所说的“我期望”,以字母顺序合并两个列表,使用迭代方式查看书中的插图,因此书中的拼写错误,而是| | |,谢谢,只有当所有列表都已排序时才有效。所以我没有得到,当i1未定义时为什么因为see为空,那么总是未定义fish=fresh.shift()从不工作,不是吗?例如,为什么
(未定义<3)
为false?它被用在您的EXM中,实际上不可能将
未定义的
与int进行比较,因此只要第一个数组结束
i1
就会变成
false
。我还可以看出测试是否有值是一个很好的实践,所以我将编辑代码以应用它=)实际上我刚刚发现了一个错误。让我尽快解决这个问题