Javascript D3.js v5 concat动态阵列
对于这个特定任务,我无法解析数据。因此,我需要用所需的格式硬编码一些数据:Javascript D3.js v5 concat动态阵列,javascript,d3.js,Javascript,D3.js,对于这个特定任务,我无法解析数据。因此,我需要用所需的格式硬编码一些数据: var data = ["1Equity","2Equity","3Equity","4Balanced","5Balanced","6MMF","7MMF","8MMF","9MMF","10MMF"]; 它本质上是一个
var data = ["1Equity","2Equity","3Equity","4Balanced","5Balanced","6MMF","7MMF","8MMF","9MMF","10MMF"];
它本质上是一个数组,包含多个不同字符串的多次出现;实际阵列将更长,因此我正在寻找一种省力的设备
我试过:
d3.range(3).map(function(v) { return v+"equity"}).push(d3.range(2).map(function(v) { return v+"balanced"})).push(d3.range(5).map(function(v) { return v+"mmf"}))
然而,这返回了:
未捕获(承诺中)d3.范围(…).映射(…).推送(…).推送不是
作用
问题:
如何将项目映射到多个不同字符串(字符串的出现基于我的离散/用户可配置)的concat数组放在一行中?
Array.prototype.push
返回数组的新长度。因此,您不能像这样对其进行链接(您调用的是push
,而不是数组)
使用reduce
可以轻松定制您想要的:
const key=[
[“衡平法”,3],
[“平衡”,2],
[“MMF”,5]
];
const data=keys.reduce((a,c)=>a.concat(d3.range(c[1]).map((u,j)=>(a.length+(j+1))+c[0]),[]);
console.log(数据)
Array.prototype.push返回数组的新长度。因此,您不能像这样对其进行链接(您调用的是push
,而不是数组)
使用reduce
可以轻松定制您想要的:
const key=[
[“衡平法”,3],
[“平衡”,2],
[“MMF”,5]
];
const data=keys.reduce((a,c)=>a.concat(d3.range(c[1]).map((u,j)=>(a.length+(j+1))+c[0]),[]);
console.log(数据)
您看到的错误是由.push()
数组的新长度而不是数组实例引起的,这会妨碍方法链接
在我看来,使用Vanilla JS可以轻松完成您的任务,而无需使用D3:
const结构=[[“股权”,3],“平衡”,2],“MMF”,5];
设i=1;
const data=[].concat(//4.连接所有子数组
structure.map(//1.Iterate结构
([k,n])=>新数组(n).填充(未定义)//2.为键k创建长度为n的子数组
.map(=>`${i++}${k}`)//3.将每个项映射到所需的字符串值
)
).flat();//5.展平为一维阵列
控制台日志(数据)
您看到的错误是由.push()
数组的新长度而不是数组实例引起的,这会妨碍方法链接
在我看来,使用Vanilla JS可以轻松完成您的任务,而无需使用D3:
const结构=[[“股权”,3],“平衡”,2],“MMF”,5];
设i=1;
const data=[].concat(//4.连接所有子数组
structure.map(//1.Iterate结构
([k,n])=>新数组(n).填充(未定义)//2.为键k创建长度为n的子数组
.map(=>`${i++}${k}`)//3.将每个项映射到所需的字符串值
)
).flat();//5.展平为一维阵列
控制台日志(数据)够公平的,你比我抢先一步。再次;-)你可能有兴趣看看我开玩笑的D3-ish解决方案:我是说,他要的……公平地说,你比我抢先一步。再次;-)你可能有兴趣看看我开玩笑的D3-ish解决方案:我是说,他自找的。。。