从json响应中确定最暗的十六进制代码

时间:2017-08-16 17:50:36

标签: javascript regex

我有一个json响应,返回一个具有不同车辆的对象。每个产品都有一个十六进制值作为与车辆颜色相关的属性:

[ { "name":"Ford", "hexCode": "4B1A1F"},
    { "name":"BMW", "hexCode": "FFFFFF"},
    { "name":"Fiat", "hexCode":"000000"}
]

我想要做的是能够从十六进制代码中确定哪一种颜色最黑,因为并非所有制造商都会使用#000000作为黑色。

这可以通过某种方式或正则表达式或JS吗?

3 个答案:

答案 0 :(得分:2)

  

因为并非所有制造商都会将#000000用于黑色。

一旦你定义了darkest对你真正意味着什么,事情会变得更容易。您的源数据不准确这一事实乍一看没有任何帮助,但仍然可以根据您的需要使用它。因为你真正关心的是亮度,而不是颜色本身,它应该值得convert the value of provided color to gray-scale拍摄,然后选择最接近0x00的那个作为最暗的一个。

答案 1 :(得分:0)

如果您已经在使用Javascript,请不要使用正则表达式。只需将json分配给变量,javascript就会对其进行解析,然后将每种颜色转换为data.reindex( pd.MultiIndex.from_product( data.index.levels ) ) Data A 6 eggs NaN spam NaN 7 eggs NaN spam NaN 8 eggs 0.938516 spam 0.487062 9 eggs 0.958066 spam 0.786476 B 6 eggs NaN spam NaN 7 eggs NaN spam NaN 8 eggs NaN spam 0.674202 9 eggs NaN spam 0.576285 并找到L值的最小值。

HSL是一种颜色方案,可以通过色调,饱和度和亮度来定义颜色,因此您可以客观地衡量“黑暗”和“黑暗”的颜色。你的颜色是。

答案 2 :(得分:0)

您需要比较以十六进制给出的RGB颜色的亮度(Y)值以找到最低值。公式是;

Y = 0.299R + 0.587G + 0.114B

所以你可以这样做;

function getY(hexValue){
  return hexValue.match(/[0-9a-fA-F]{2}/g)
                 .map(h => parseInt("0x"+h))
                 .reduce((r,c,i) => (r[3] += r[i]*c, r),[0.299,0.587,0.114,0])[3];
}

var data = [ { "name":"Ford", "hexCode": "4B1A1F"},
             { "name":"BMW", "hexCode": "FFFFFF"},
             { "name":"Fiat", "hexCode":"000000"}
           ],
  result = data.map(d => Object.assign({},d, {Y: getY(d.hexCode)}))
               .reduce((p,c) => p.Y <= c.Y ? p : c);

console.log(result);