我有一个名为colorHM的变量:
var colorHM = "50,50,74,255,100,255,4,3,50".
现在我在这里使用此代码段按照以下方案将其切成碎片:R,g,b,R,g,b,R,g,b
,然后再次切成var a = R,g,b
和var b = R,g,b
等...
var firstColorHM = colorHM.split(",", 3);
firstColorHM = firstColorHM.toString();
var firstColorHMA = firstColorHM.split(",");
firstCMA.push(firstColorHMA[0]);
firstCMA.push(firstColorHMA[1]);
firstCMA.push(firstColorHMA[2]);
但是用它来计算distance = eDist(firstCMA, firstCTA)
会给我NaN
。
function eDist (col1, col2) {
var rmean = ((col1[0] + col2[0]) / 2);
var dR = (col1[0] - col2[0]);
var dG = (col1[1] - col2[1]);
var dB = (col1[2] - col2[2]);
return Math.sqrt((2 + (rmean / 256)) * Math.pow(dR, 2) + (4 * Math.pow(dG, 2)) + ( 2 + ((255- rmean) / 256)) * Math.pow(dB, 2));
}
使用firstCMA.push(10); firstCMA.push(20); firstCMA.push(30);
而不是firstCMA.push(firstColorHMA[0]);..
使它再次起作用。
变量firstCTA
被忽略,但以相同的方式进行解析。
我只是通过尝试从数组中调用不同的索引来检查数组是否正常工作。
为什么推数字有效而推firstColorHMA[0]
却不起作用?
谢谢!
答案 0 :(得分:0)
就像评论中所说的那样,当您分割字符串时,生成的数组将包含字符串:
split()方法通过使用指定的分隔符字符串将字符串对象拆分为子字符串,将字符串对象拆分为字符串数组,以确定每个拆分的位置。
实际上,数组firstColorHMA
将数字保存为字符串,这很容易解决,将使用unary plus
将数组项转换为数字,如下所示:
firstCMA.push(+firstColorHMA[0]);
firstCMA.push(+firstColorHMA[1]);
firstCMA.push(+firstColorHMA[2]);
或者,使用更明确的逻辑,例如:
firstCMA.push(Number(firstColorHMA[0]));
firstCMA.push(Number(firstColorHMA[1]));
firstCMA.push(Number(firstColorHMA[2]));