Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
配对javascript对象并指定相同的颜色_Javascript - Fatal编程技术网

配对javascript对象并指定相同的颜色

配对javascript对象并指定相同的颜色,javascript,Javascript,有没有可能找到一种更好的/模块化的方法,将相同的颜色分配给成对的对象,而不是像我目前实现的那样对它们进行硬编码 如果对象fname匹配,则指定相同的颜色 下面是javascript对象的子集 data[0] = [{ "value": 29, "series": 1, "category": "Men", "fname": "NY", "valueColor": "red" }, data[1] = [{ "value": 19, "

有没有可能找到一种更好的/模块化的方法,将相同的颜色分配给成对的对象,而不是像我目前实现的那样对它们进行硬编码

如果对象
fname
匹配,则指定相同的颜色

下面是javascript对象的子集

data[0] = [{
    "value": 29,
    "series": 1,
    "category": "Men",
    "fname": "NY",
     "valueColor": "red"
},


data[1] = [{
    "value": 19,
    "series": 4,
    "category": "Women",
    "fname": "NY",
     "valueColor": "red"
},

data[2] = [{
    "value": 9,
    "series": 3,
    "category": "LG",
    "fname": "NY",
    "valueColor": "red"
},
以下是

首先,我假设所有对象都不同并指定不同的颜色,然后我将检查是否有任何成对的对象,如果是,则指定相同的颜色

因此,最好根据数据集中存在的大量对象生成
颜色光谱
,而不是指定常见颜色,如红色、绿色、黄色等。。因为你无法预先猜到你会得到多少不同的物体。我可能会得到10个左右,100个左右。因此,我正在寻找一种模块化的方法来处理这个难题


下面是
彩色光谱
方法在中的实现,您可以这样做

function colorSpectrum(N) {
    var colorMap = [], inc = 50, start = 1000;
    for (i = start; i < start+N*inc; i+=inc) {
        var num = ((4095 * i) >>> 0).toString(16);
        while (num.length < 3) {
            num = "0" + num;
        }
        colorMap.push("#" + num);
    }
    return colorMap;
}

function process(data){
    var map = {}, colorMap = colorSpectrum(data.length);
    data.forEach(function(item, index){
        if(!map.hasOwnProperty(item.fname)){
            map[item.fname] = colorMap[index];
        }
        data[index].valueColor = map[item.fname];
    }); 

    return data;
}

data = process(data);
函数色谱(N){
var colorMap=[],inc=50,start=1000;
对于(i=start;i>>0.toString(16);
while(num.length<3){
num=“0”+num;
}
colorMap.push(“#”+num);
}
返回彩色地图;
}
功能流程(数据){
var-map={},colorMap=colorSpectrum(data.length);
data.forEach(函数(项、索引){
如果(!map.hasOwnProperty(item.fname)){
map[item.fname]=colorMap[index];
}
数据[index].valueColor=map[item.fname];
}); 
返回数据;
}
数据=过程(数据);

这是一个演示

您想让所有共享公共fname值的对象也具有相同的值Color值吗?如果是这样,如何为给定的fname值确定合适的颜色?是的,完全正确。请看我的最新问题。你的网站是否偶然使用了lodash?我第一次听到
lodash
,这意味着没有。为具有相同
fname
的对象指定相同的颜色是很清楚的。对我来说,理解光谱是很困难的。不管怎样,你在找这样的东西吗?在本例中,根据数据生成18种光谱颜色,相同fname的对象具有相同的颜色。你知道为什么图例与条形图颜色不匹配吗?@AndreaBanderas:这太奇怪了。无论图表是哪种颜色,图例颜色似乎都不会改变。一旦我弄明白了什么,我会让你知道的。我已经得到了一个答案,但当我把它结合起来时,它就不起作用了@安德烈阿巴德拉斯:看起来超级黑。但只有最后3个图例项有效。疯了!检查我添加的
e.series.data[I].fname!=“
转换为
if(e.series.data[i].valueColor!=”&&e.series.data[i].fname!=”)