我可以从数组中获取最大数,但是如果它与数组中的另一个数相同,它也会返回最大数。我想获取数字,否则检查数字是否实际上高于数组中的其他数字。
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
为其他值。
答案 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();
}
}
,r
和g
创建对象。这样,您可以将b
与键名进行比较。如果它是一个数组,如果是colour
,则无法将其映射到index = 0,因此您必须手动检查值。
您可以遍历键值对,并根据问题中提供的条件获取最大值和colour = 'r'
,如下所示:
colcheck