首页 > 解决方案 > 我用数量=5 和 arr=[0,0,0,0,0] 调用了 getFewMaxNumbers。为什么我从 [0,0,0,0,0] 得到数组?

问题描述

我用数量=5 和 arr=[0,0,0,0,0] 调用了 getFewMaxNumbers。为什么函数返回 [0,0,0,0] 数组。我不明白。请帮帮我!

function getMaxIndexOfArr(a) {
    let index=0;
    for(let i=1; i<a.length; i++) {
        if(a[i] !== "" && a[i] > a[index]) index=i;
    }
    return index;
}
let getFewMaxNumbers = (arr, quantity) => getFewMinOrMaxNumbers(arr, quantity, "max");
let getFewMinOrMaxNumbers = (arr, quantity, type) => {
    let indexes = [];
    for(let i=0; i<quantity; i++) {
        if(type === "min") {
            let newIndex = getMinIndexOfArr(arr);
            if(newIndex !== undefined) {
                arr[newIndex] = "";
                indexes.push(newIndex);
            }
        }
        else if(type == "max") {
            let newIndex = getMaxIndexOfArr(arr);
            
            if(newIndex !== undefined) {
                console.log('Eheeee!!', arr[newIndex])
                arr[newIndex] = "";
                indexes.push(newIndex);
            }
        }
    }
    return indexes
}
getFewMaxNumbers([0,0,0,0,0], 5);

标签: javascript

解决方案


因此,该功能存在一些问题getMaxIndexOfArr

  1. 循环从这1意味着它总是跳过第一项。
  2. index初始化为0,我猜这是为了解决第一个问题,但是当数组充满零时,比较器a[i] > a[index]始终为假a[1]=0a[0]最终变为“”;0不大于""

一种可行的方法是:

function getMaxIndexOfArr(a) {
    let index=undefined;
    for(let i=0; i<a.length; i++) {
        if(a[i] === "") continue;

        if (index === undefined) {
          index = i;
        } else if (a[i] > a[index]) {
         index = i;
        }
    }
    return index;
}
let getFewMaxNumbers = (arr, quantity) => getFewMinOrMaxNumbers(arr, quantity, "max");
let getFewMinOrMaxNumbers = (arr, quantity, type) => {
    let indexes = [];
    for(let i=0; i<quantity; i++) {
        if(type === "min") {
            let newIndex = getMinIndexOfArr(arr);
            if(newIndex !== undefined) {
                arr[newIndex] = "";
                indexes.push(newIndex);
            }
        }
        else if(type == "max") {
            let newIndex = getMaxIndexOfArr(arr);
            if(newIndex !== undefined) {
                arr[newIndex] = "";
                indexes.push(newIndex);
            }
        }
    }
    return indexes
}
console.log(getFewMaxNumbers([0,0,0,0,0], 5));


推荐阅读