Javascript d3.csv将列值映射为对象中的键
我正在处理拖放示例,希望从csv读取数据 我想将csv文件中返回的数据重新格式化为所需的格式。 在拖放场景中,被拖动的元素具有来自数组[3]的值,并被拖放到具有r1val(n)的元素上。当这些值匹配时,将发生一个事件。 我想找到一种方法,将第一列的值设置为键,如下面的对象所示 file.csv:Javascript d3.csv将列值映射为对象中的键,javascript,csv,d3.js,Javascript,Csv,D3.js,我正在处理拖放示例,希望从csv读取数据 我想将csv文件中返回的数据重新格式化为所需的格式。 在拖放场景中,被拖动的元素具有来自数组[3]的值,并被拖放到具有r1val(n)的元素上。当这些值匹配时,将发生一个事件。 我想找到一种方法,将第一列的值设置为键,如下面的对象所示 file.csv: col1,col2,col3,col4 r1val1,r1val2,r1val3,r1val4 r2val1,r2val2,r2val3,r2val4 .... 所需格式: var
col1,col2,col3,col4
r1val1,r1val2,r1val3,r1val4
r2val1,r2val2,r2val3,r2val4
....
所需格式:
var colSet = {
r1val1 : ["r1val2","r1val3","r1val4"],
r2val1 : ["r2val2","r2val2","r2val2"],
...
}
Object
r1val1: Array[3]
r2val1: Array[3]
...
__proto__: Object
所需格式的console.log:
var colSet = {
r1val1 : ["r1val2","r1val3","r1val4"],
r2val1 : ["r2val2","r2val2","r2val2"],
...
}
Object
r1val1: Array[3]
r2val1: Array[3]
...
__proto__: Object
我的目标是这个功能:
var DragDropManager = {
dragged: null,
droppable: null,
draggedMatchesTarget: function() {
if (!this.droppable) return false;
return (colSet[this.droppable].indexOf(this.dragged) >= 0);
}
}
这将生成一个而不是JavaScript对象,但应该适合您的情况(您仍然可以使用obj[key]访问对象之类的元素):
例如
在这一点上,我们都想得太多了,那么:
d3.csv('test.csv', function(error, rows) {
var obj = {};
rows.forEach(function(d){
obj[d.col1] = [d.col2, d.col3, d.col4];
});
console.log(obj);
});
更新。d3.csv(“数据/语言.csv”,函数(错误,数据){
//重新格式化数据数组内容剥离“键”和“值”
var refData=data.map(函数(d){
var rObj={};
rObj[d.col1]=d.col3;
返回rObj;
});
//合并对象的函数
函数合并(目标,源){
/*合并两个(或多个)对象,
给予最后一个优先权*/
如果(目标类型!==“对象”){
目标={};
}
对于(源中的var属性){
if(source.hasOwnProperty(property)){
var sourceProperty=源[属性];
if(typeof sourceProperty==='object'){
target[property]=util.merge(target[property],sourceProperty);
继续;
}
目标[属性]=源属性;
}
}
for(var a=2,l=arguments.length;a
这段代码实际上生成了所需的对象。我对循环函数不太满意,因为它每行生成一个dwarfSet,而不是一个整体
非常欢迎您提出改进建议。我认为这可以通过以下方法实现:
var obj = d3.nest()
.key(function(d) { return d.r1val1; })
.entries(data);
您可以使用jquery进行解析,但这可能不是最好的。@DotBeep-我已经在需要对象的地方包含了函数。Mark我已经使用了d3.map,到目前为止它还不起作用,我将重试。我的“更新”中的函数确实创建了正确的格式,但每行一次。我有一个对象合并函数,现在我必须弄清楚如何在循环中使用它。@EdDie,看看新的答案。我们都太花哨了:)