Javascript JS:在算法中跳过布尔值

Javascript JS:在算法中跳过布尔值,javascript,Javascript,我在做一个algo问题,让我遍历一个数组,删除所有的0并将它们放在末尾,同时保留其他元素的顺序。我想到了: var moveZeros = function (arr) { let zeroArr = []; for (var x = arr.length - 1; x >= 0; x--) { if (arr[x] == 0) { zeroArr.push(0); arr.splice(x,1); } } return arr

我在做一个algo问题,让我遍历一个数组,删除所有的0并将它们放在末尾,同时保留其他元素的顺序。我想到了:

var moveZeros = function (arr) {
  let zeroArr = [];

  for (var x = arr.length - 1; x >= 0; x--) {
    if (arr[x] == 0) {
       zeroArr.push(0);
       arr.splice(x,1);
    }

}

  return arr.concat(zeroArr);
}
我已经通过了所有案例,但有两个测试案例失败,其中
false
在数组中

返回:
[1,4,2,“5”,4,false,false,0,0,0]


应为:
[1,4,2,5,4,0,0,0]
您与0进行了粗略的比较。您需要使用
==
而不是
==
与它进行精确比较

var moveZeros=函数(arr){
设zeroArr=[];
对于(变量x=arr.length-1;x>=0;x--){
如果(arr[x]==0){
零加速推力(0);
arr.拼接(x,1);
}
}
返回arr.concat(zeroArr);
}

对于可能是虚假或真实的值,如果要直接与之进行比较,应使用完全等于,而不是松散等于。

您是松散地与0进行比较。您需要使用
==
而不是
==
与它进行精确比较

var moveZeros=函数(arr){
设zeroArr=[];
对于(变量x=arr.length-1;x>=0;x--){
如果(arr[x]==0){
零加速推力(0);
arr.拼接(x,1);
}
}
返回arr.concat(zeroArr);
}

对于可能是虚假或真实的值,如果要直接与之进行比较,应使用完全等于,而不是松散等于。

这是javascript中相等运算符(
=
)的行为

如果其中一个操作数是布尔操作数,请将布尔操作数转换为1(如果是) 为真,如果为假则为+0

处理相等运算符时有更多不同的行为,但这是一个良好的开端:

相等运算符(=)检查其两个操作数是否相等,并返回布尔结果。与严格相等运算符不同,它尝试转换和比较不同类型的操作数


您可以在这里找到所有详细信息(包括与严格运算符
==
的区别):

这是javascript中相等运算符(
=
)的行为

如果其中一个操作数是布尔操作数,请将布尔操作数转换为1(如果是) 为真,如果为假则为+0

处理相等运算符时有更多不同的行为,但这是一个良好的开端:

相等运算符(=)检查其两个操作数是否相等,并返回布尔结果。与严格相等运算符不同,它尝试转换和比较不同类型的操作数


您可以在此处找到所有详细信息(包括与严格运算符的差异):

始终使用
==
,从不
==
始终使用
==
,从不
=