只有唯一的Javascript才会获得最高的数字

时间:2019-06-21 07:22:26

标签: javascript arrays

我可以从数组中获取最大数,但是如果它与数组中的另一个数相同,它也会返回最大数。我想获取数字,否则检查数字是否实际上高于数组中的其他数字。

const check = Math.max(...[r, g, b]);
let colcheck = false;
if (check === r && colour === 'r' && r > g && r > b) colcheck = true;
else if (check === g && colour === 'g' && g > r && g > b) colcheck = true;
else if (check === b && colour === 'b' && b > r && b > g) colcheck = true;

这可行,但对我来说似乎有点混乱,可能不是最优化的方式。因此,在RGB值为1,1,0的情况下,colcheck为假,而colour为'r'或'g',因为它不高于其他值。但是,如果RGB值为20,67.6,则colcheck正确,而colour为'g',而false为其他值。

4 个答案:

答案 0 :(得分:1)

由于数组将始终包含3个值,因此如果两个值相同,我们可以返回三个中的最小值:

let r = 10;
let g = 10;
let b = 5;
const rgb = [r, g, b];
const check = rgb.filter(e => e === Math.max(...rgb)).length === 1 ? Math.max(...rgb) : Math.min(...rgb);

console.log(check); // 5

答案 1 :(得分:0)

或者您可以使用reduce()来做到这一点:

const colnam="rgb-";
const primcol=c=>{var prim=0;
    c.reduce((mx,v,i)=>{
        if (v>mx) {prim=i; return v}
        else if (v==mx) prim=3;
        return mx;
    });
 return colnam[prim];
}

primcol([redval,greenval,blueval])将在其中一种颜色占主导时返回“ r”,“ g”或“ b”,否则返回“-”。这是一个带有示例数据的小片段:

var cols=[[200,200,30],[23,45,8],[128,240,240],[244,243,242]],colnam="rgb-";

const primcol=c=>{var prim=0;
c.reduce((mx,v,i)=>{
	if (v>mx) {prim=i; return v}
	else if (v==mx) prim=3;
 return mx;
 });
 return colnam[prim];
}
 
cols.forEach(col=>
console.log(col,primcol(col)))

答案 2 :(得分:0)

由于我缺乏阅读能力,因此我写了一些适用于任何数组大小的东西,在这种情况下这是非常不切实际的(特别是查看@TimVN的答案)。但是,由于标题可能会导致人们期望得到更一般的答案,因此请考虑以下几点:

let arr = [5,2,2,-4,-3,3,4,-5,-5,3,4,5,5,-7];
    res = Object.entries(arr.reduce((a,c) => {a[c] = (a[c] || 0) + 1; return a;},{}))
                  .filter(([k,v]) => v == 1)
                  .reduce((m,[k,v]) => m > +k ? m : +k, NaN)

console.log(res);

第一个内部reduce创建一个对象,我们用它存储和计算不同的整数。这里的想法是具有类似地图的结构,而不是嵌套循环,以降低总体复杂性。

我们从该对象中通过Object.entries获取条目,并对其进行过滤以计数1。然后,我们再次应用reduce以从其余对(值/计数为1的对)中获得最高的key。通过将NaN设置为reduce的起始值,即使filter不返回任何内容,我们也可以确定该函数的工作方式。 NaN还可为我们提供一个布尔值,这对我们有帮助。

要将其转换为布尔值,只需在? true : false;之后添加reduce,您就可以进行评估,因为如果没有最大值,reduce将得出NaN,这是错误的。

答案 3 :(得分:0)

您可以使用for(i=3; i<row; i++) { for(j=0; j<col; j++) { arr[i][j] = scan.nextInt(); } } rg创建对象。这样,您可以将b与键名进行比较。如果它是一个数组,如果是colour,则无法将其映射到index = 0,因此您必须手动检查值。

您可以遍历键值对,并根据问题中提供的条件获取最大值和colour = 'r',如下所示:

colcheck