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.展平为一维阵列

控制台日志(数据)