Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 D3.js使用spectrum.js函数为节点圆着色_Javascript_Jquery_Json_D3.js_Spectrumjs - Fatal编程技术网

Javascript D3.js使用spectrum.js函数为节点圆着色

Javascript D3.js使用spectrum.js函数为节点圆着色,javascript,jquery,json,d3.js,spectrumjs,Javascript,Jquery,Json,D3.js,Spectrumjs,对于每个节点,我都有一个圆,我使用函数ColorType(d)对其着色: 我的ColorType函数是 function ColorType(d){ for (var i = 0; i < TypesTab.length; i++) { if (d.type == TypesTab[i].type) { return ColorAction;} } } 问题是当我在ColorType(d)函数中硬编码类型时 if (d.type == "school

对于每个节点,我都有一个圆,我使用函数
ColorType(d)
对其着色:

我的
ColorType
函数是

function ColorType(d){
    for (var i = 0; i < TypesTab.length; i++) {
        if (d.type == TypesTab[i].type) { return ColorAction;}
    }   
}
问题是当我在
ColorType(d)
函数中硬编码类型时

if (d.type == "school") { return ColorAction;}
它仅成功为学校类型节点着色。但是,如果我想使其成为动态的,以便它使用颜色选择器指定的类型对节点进行着色,那么它将失败,因为我无法与
o.type
每个
进行连接。因此,问题是将
o.type
每个
传递到
ColorAction
和/或
ColorType(d)
中,以便每个容器仅为其自身类型的节点着色

这是一次失败的尝试,因为它没有考虑
o.type
,而是从一个全局变量(
TypesTab
)读取类型中的
类型
,该变量保存类型中的所有
类型

function ColorType(d){
    for (var i = 0; i < TypesTab.length; i++) {
        if (d.type == TypesTab[i].type) { return ColorAction;}
    }

}

这就是我读取/导入JSON的方式。内部for in是基本的,因此您需要更改该部分以满足您的需要

d3.json(“data.json”),函数(错误,数据){
console.log(d3.values(data));//作为检查执行此操作
for(数据中的var d){
d、 节点=+d.nodes;
d、 links=+d.links;
d、 类型=+d.类型;
}
//我可以去这里

})

这是我如何读取/导入JSON的。内部for in是基本的,因此您需要更改该部分以满足您的需要

d3.json(“data.json”),函数(错误,数据){
console.log(d3.values(data));//作为检查执行此操作
for(数据中的var d){
d、 节点=+d.nodes;
d、 links=+d.links;
d、 类型=+d.类型;
}
//我可以去这里

})

这可能不是答案,但一般来说,在比较中应该使用===而不是==。如果==还没有伤害到你,它肯定会伤害你。为什么-因为===同时测试相等值和相等类型。请参阅此SO帖子以获取解释。你已经发布了很多有用的信息,但在这种情况下,它掩盖了这个问题。你能把这个问题分解成一个简单的例子吗?好的,你知道JSON格式不正确,在“{”type“:“company”,“image:“image03”}”之后有一个额外的逗号,`JSON标准不允许在第15行尾随逗号和JSON…','或者']'应该是,得到'.''。另外,为什么要使用$.getJSON呢?为什么不使用d3的内置函数d3.json()来导入数据呢?事实上,您正在使用很多jQuery,其中最好只使用d3.js函数?这可能不是答案,但一般来说,在比较中应该使用===而不是==。如果==还没有伤害到你,它肯定会伤害你。为什么-因为===同时测试相等值和相等类型。请参阅此SO帖子以获取解释。你已经发布了很多有用的信息,但在这种情况下,它掩盖了这个问题。你能把这个问题分解成一个简单的例子吗?好的,你知道JSON格式不正确,在“{”type“:“company”,“image:“image03”}”之后有一个额外的逗号,`JSON标准不允许在第15行尾随逗号和JSON…','或者']'应该是,得到'.''。另外,为什么要使用$.getJSON呢?为什么不使用d3的内置函数d3.json()来导入数据呢?事实上,您正在使用很多jQuery,其中最好只使用d3.js函数?我得到
类型错误:data.forEach不是函数
@jacky OK,所以我的错误是尝试使用for In而不是forEach循环。这也是一个很大的错误,反正这不是直接解决这个问题的答案。你能为我得到的问题提供一个有效的答案吗?
TypeError:data.forEach不是一个函数
@jacky好的,所以我的错误是用for代替forEach循环。这也是一个很大的错误,反正这不是直接解决这个问题的答案。你能为这个问题提供一个有效的答案吗
if (d.type == "school") { return ColorAction;}
function ColorType(d){
    for (var i = 0; i < TypesTab.length; i++) {
        if (d.type == TypesTab[i].type) { return ColorAction;}
    }

}
{
    "nodes": [
        {
        "type": "school",
        "country": "US",
        "name": "saint peter's",
        "id": 1006
        },
        {
        "type": "univeristy",
        "country": "Brazil",
        "name": "saint joseph's",
        "id": 1007
        }        
        ...
    ],
    "links": [
            {
            "source": 1006,
            "target": 1007,
            "value": 20            
        },
       ...

    ],
    "types": [
                {
                    "type": "school",
                    "image": "image01"
                },
                {
                    "type": "univeristy",
                    "image": "image02"
                },
                {
                    "type": "company",
                    "image": "image03"
                },
                ...
            ]   
}