从数组中提取最大数字

时间:2014-04-29 04:59:53

标签: javascript range

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15);

我需要从这种集合中提取最大数字  提取了多少个数字并不重要 但他们需要与未提交的人有显着差异。

所以在这个集合中我应该得到[9, 12, 15]

我甚至不知道如何开始。

4 个答案:

答案 0 :(得分:4)

如果你似乎在对你的问题的评论中表明,你只想要那些超过第三个四分位数的人,那就很容易了。

只需创建N个数字的已排序列表,然后获取3N/4索引位置以上的数据。

您可以使用Array.sort()对数组进行排序,使用Array.length获取长度,使用Array.slice()来提取数组的切片。

例如,以下代码:

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15);
document.write(set);

set.sort(function(a, b){return a-b});
document.write('<br>');
document.write(set);

var len = set.length;
document.write('<br>');
document.write(len);

var topQ = set.slice (3*len/4);
document.write('<br>');
document.write(topQ);

输出未排序和排序的列表,长度和前25%:

1,2,1,2,3,9,12,15
1,1,2,2,3,9,12,15
8
12,15

答案 1 :(得分:2)

以下是获得max 3最大值

的解决方案
 var set = new Array(1, 2, 1, 2, 3, 9, 12, 15);


function getmax(index)
{ return set.sort(function(a,b){return b-a;})[index];

}

var topmax = new Array(
getmax(2),getmax(1),getmax(0)
)


console.log(topmax);

JSBIN Example

<强> EDITED

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15);

 set.sort(function(a,b){return b-a;});



document.write(set[2],set[1],set[0]);

答案 2 :(得分:1)

选择最大数字的另一种方法:

var set = new Array(1, 2, 1, 2, 3, 9, 12, 15);

function getHighNums(arr,percentage,fillpercentage){
    var perc=0;
    var sorted=arr.sort(function(a,b){ return a-b});
    var total=0;
    for(var i=0;i<arr.length;i++) total+=arr[i];
    for(var j=sorted.length-1;j>=0;j--){
        perc+=sorted[j]/total*100;
        if(fillpercentage){
            if(perc > percentage) return sorted.slice(j,sorted.length);
        }else{ 
            if(sorted[j]/total*100 < percentage) return sorted.slice(j+1,sorted.length);
        }
    }
    return sorted;

}

console.log(getHighNums(set, 10, false))//9,12,15
console.log(getHighNums(set, 50, true))//12,15

第一行获得的数字至少是数组值总和的10%。数组的总和= 1+2+1+2+3+9+12+15=45,因此它会选择数字> 4.5

第二行得到数字,直到它们的总和至少是数组总和的50%。因此,作为数组=45的总和,它将选择最高数字,直到它们的总和为> 22.5

答案 3 :(得分:0)

你可以试试这个。 (寻找小于CV的值 - CV / I;其中CV - 当前值; I - 某个系数)

的Javascript

var data = [1, 2, 1, 2, 3, 9, 12, 15],
    index = 3,
    i;

function getMaximums(data, index){
    data = data.sort(function(a, b){return a < b});

    for(i = 0; i < data.length; i++){
        if(!data[i + 1] || (data[i] - data[i] / index) > data[i + 1]) return data.splice(0, i + 1);
    }
}

console.log(getMaximums(data, index));