Javascript Array/Object JSON data.map不是D3.js v3的函数

Javascript Array/Object JSON data.map不是D3.js v3的函数,javascript,jquery,arrays,object,d3.js,Javascript,Jquery,Arrays,Object,D3.js,我有一个动态JSON数据,它改变了API可能返回单个对象或数据数组的方式,当API返回单个对象时,我在循环和数据映射上得到一个错误。但我试着不将forEach应用于数据,而是单独获取数据并将其存储到数据中。我得到一个数据错误。map不是一个函数。我有一个条形图,我想显示下面的数据 "City": { "Town": "Texas", "Number": "12" } 下面的代码显示了指向forEach和data.map的数据。如果返回大量数据,代码将正确显示 data

我有一个动态JSON数据,它改变了API可能返回单个对象或数据数组的方式,当API返回单个对象时,我在循环和数据映射上得到一个错误。但我试着不将forEach应用于数据,而是单独获取数据并将其存储到数据中。我得到一个数据错误。map不是一个函数。我有一个条形图,我想显示下面的数据

 "City": {
    "Town": "Texas",
    "Number": "12"
  }
下面的代码显示了指向forEach和data.map的数据。如果返回大量数据,代码将正确显示

  data.forEach((d) => {
       d.town = d.Town;
       d.number = +d.Number;
  }); 

  const xScale = d3.scale.ordinal()
            .domain(data.map(d => d.town))
            .rangeRoundBands([0, width], 0.1);

  const yScale = d3.scale.linear()
            .domain([0, d3.max(data, d => d.number)])
            .range([height, 0]);

无论API返回单个或多个值或数据,我如何能够处理图形中的动态数据

JavaScript中的对象{}没有方法.map(),它只用于数组[]


因此,为了让您的代码正常工作,请将data.map()更改为data.city.map(),因为city是一个可以迭代的数组。

您可以使用
array.isArray()
在尝试使用
.map()
@Pointy之前测试值,在检查数组.isArray()之后,我可以使用什么来替换.map()?如果它不是数组,然后它只是一个对象,您可以直接访问
data.town
。如果数据只包含{“town”:“Texas”,“Number”:“12”},您可以直接返回它们;var数据={“城镇”:“德克萨斯州”,“编号”:“12”};document.getElementById(“demo”).innerHTML=data[“Town”];