在javascript中测试多维数组
我在FreeCodeCamp上解决挑战。下面的代码通过了测试,挑战被标记为已解决,但我自己的测试没有通过,我不明白为什么在javascript中测试多维数组,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我在FreeCodeCamp上解决挑战。下面的代码通过了测试,挑战被标记为已解决,但我自己的测试没有通过,我不明白为什么 function chunk(arr, size) { if (size >= arr.length || size <= 0) return [arr]; var result = []; var i = 0; while(arr.length > 0) { result.push([]);
function chunk(arr, size) {
if (size >= arr.length || size <= 0)
return [arr];
var result = [];
var i = 0;
while(arr.length > 0) {
result.push([]);
for (var j = 0; j < size && arr.length > 0; ++j) {
result[i].push(arr.shift());
}
i++;
}
return result;
}
alert(chunk(["a", "b", "c", "d"], 2) == [["a", "b"], ["c", "d"]]);
功能块(arr,大小){
如果(尺寸>=arr.length | |尺寸0){
结果:推送([]);
对于(变量j=0;j0;++j){
结果[i].push(arr.shift());
}
i++;
}
返回结果;
}
警报(区块([“a”、“b”、“c”、“d”]、2)==[“a”、“b”]、[“c”、“d”]);
如果我在JS中正确理解了数组的本质,警报应该打印为true,但它打印为false,我不知道为什么?这是有效的:
功能块(arr,大小){
如果(尺寸>=arr.length | |尺寸0){
结果:推送([]);
对于(变量j=0;j0;++j){
结果[i].push(arr.shift());
}
i++;
}
返回结果;
}
var array1=区块([“a”、“b”、“c”、“d”],2);
变量array2=[
[“a”、“b”],
[“c”、“d”]
];
var等于(array1.length==array2.length)和&array1.every(函数(元素、索引){
返回(element.length==array2[index].length)和&element.every(函数(element1,index1){
返回元素1==array2[index][index1];
});
});
警惕(等于)代码>这是最有效的解决方案:
功能块(arr,大小){
var输出=[];
变量长度=arr.length;
对于(变量x=0,长度=arr.length;x 警惕(等于)代码>由于数组是对象,并且只有当两个对象都指向内存中的同一个对象时,对象才相等,所以不能简单地使用==
检查数组是否相等。你需要一个更复杂的平等性检查。不过,对于这种简单的情况,比较JSON.stringify
结果是可行的。数组是对象。它们是通过引用传递的,所以var a=['a'];变量b=['a'];a==b
将返回false.JSON.stringify works,谢谢@Yoshi!我忘记了数组是objects=(我认为它不起作用,因为这些数组是二维的。请查看我的更正,如果我的检查正确,请给出一些反馈?`var equals=(array1.length==array2.length)&&array1.every(function(element,index){return element.every(function)(element2,index2){return element2==array2[index][index2];});});alert(equals);`是的,谢谢你,@P.Jairaj!但是如果我们更仔细一点,我想第二次长度检查应该是这样的:element.length==array2[index].length
,因为内部数组可能有不同的长度=)啊哈…我厌倦了这些注释代码格式…有人能帮我吗?=)我已经尝试了我认为所有的变体。。。