Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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 获取数组中的最后一项行为异常_Javascript_Arrays_Loops - Fatal编程技术网

Javascript 获取数组中的最后一项行为异常

Javascript 获取数组中的最后一项行为异常,javascript,arrays,loops,Javascript,Arrays,Loops,我有一个函数,它应该对数组进行排序,然后得到最后一个项目的差值——第一个项目,并在两者之间添加所有缺失的数字,然后将其与原始数组进行比较,计算出添加了多少数字,所以它工作得很好,但是在一些测试用例上,它的行为很奇怪,数组中最后一个索引项不是正确的,下面是代码和测试用例 function makeArrayConsecutive2(statues) { var sorted = statues.sort(); var arr =[]; var firstItem = sor

我有一个函数,它应该对数组进行排序,然后得到最后一个项目的差值——第一个项目,并在两者之间添加所有缺失的数字,然后将其与原始数组进行比较,计算出添加了多少数字,所以它工作得很好,但是在一些测试用例上,它的行为很奇怪,数组中最后一个索引项不是正确的,下面是代码和测试用例

function makeArrayConsecutive2(statues) {
    var sorted = statues.sort();
    var arr =[];
    var firstItem = sorted[0];
    var lastItem = sorted[sorted.length -1];
    var difference= lastItem-firstItem;
    var counter=0;

    for (var i=0;i<=difference;i++){
        arr.push(firstItem++);
    }

    for(var i=0;i<arr.length;i++){
        if(sorted.indexOf(arr[i])==-1){
            counter++;
        }
    }

    console.log(counter);
}

makeArrayConsecutive2([1,3,5]); //this works correctly and the output 
//is 2 since the numbers missing are 2 and 4 so 2 numbers

makeArrayConsecutive2([1,3,5,9,12]); //this outputs 5 when it should 
//output 7
函数makeArrayConsecutive2(状态){
var sorted=status.sort();
var-arr=[];
var firstItem=sorted[0];
var lastItem=sorted[sorted.length-1];
变量差异=lastItem firstItem;
var计数器=0;

对于JavaScript中的(var i=0;i,内置的
Array.sort()
基于字符串而不是数字进行排序。因此,即使您有一个数字数组,也需要向sort()方法传递一个比较函数,以确保值按数字排序:

函数makeArrayConsecutive2(状态){
var sorted=status.sort(函数(a,b){
返回a-b;
});
var-arr=[];
var firstItem=sorted[0];
var lastItem=sorted[sorted.length-1];
变量差异=lastItem firstItem;
var计数器=0;

对于JavaScript中的(var i=0;i,内置的
Array.sort()
基于字符串而不是数字进行排序。因此,即使您有一个数字数组,也需要向sort()方法传递一个比较函数,以确保值按数字排序:

函数makeArrayConsecutive2(状态){
var sorted=status.sort(函数(a,b){
返回a-b;
});
var-arr=[];
var firstItem=sorted[0];
var lastItem=sorted[sorted.length-1];
变量差异=lastItem firstItem;
var计数器=0;

对于(var i=0;我还有一个警告,因为OP可能不知道,因为给定了代码:
sort
将对数组进行排序,然后返回它。因此,
sorted
status
是同一个数组,如果您希望
makeArrayConsecutive
不会弄乱
status
的话,您会大吃一惊。还有一个警告,因为OP如果给定代码,
sort
将对数组进行排序,然后返回它。因此,
sorted
status
是同一个数组,如果您希望
makeArrayConsecutive
不会将
status
弄乱,您会大吃一惊。