将数组推入数组并使用它会抛出NaN

时间:2019-01-21 15:26:07

标签: javascript arrays nan extendscript

我有一个名为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,bvar 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]却不起作用?

谢谢!

1 个答案:

答案 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]));