.map()不是映射动态创建的对象的函数错误

时间:2017-12-05 20:32:13

标签: javascript json dojo

我正在尝试将动态创建的对象映射到像这样的数组

          params.junctionBarriers = dojo.toJson(junctionBarriers);
          // printing the object in the console (Please look at attached image)
          console.log(params.junctionBarriers);

          var value = [];
          var data = params.junctionBarriers.map(function (s) {
             value.push(webMercatorUtils.xyToLngLat(s.x, s.y, true));
              return s;
          })

但我收到此错误

  

params.junctionBarriers.map不是函数

enter image description here

正如您从图片中看到的那样,params.junctionBarriers是动态加载的,但.map()无效?!能告诉我为什么以及如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

Look at the documentation for dojo.toJson

该方法将对象转换为JSON格式的字符串

字符串没有方法地图

那你为什么不单独做junctionBarriers.map?鉴于你已经拥有该变量中的对象数组(这不是params.junctionBarriers)

答案 1 :(得分:2)

实际上 dojo.toJson() JSON.stringify() 相同,后者正在将您的array转换为JSON string这里。问题是您尝试在.map()上致电string

这就是你收到错误的原因:

  

params.junctionBarriers.map不是函数

因此,在将.map()转换为JSON object之前,您需要进行string来电。

答案 2 :(得分:1)

  • 选项1:不要使用dojo.ToJson。
  • 选项2:如果由于某种原因需要将对象转换为JSON字符串,则需要在使用.map之前将其解析回对象

          // Option 1 params.junctionBarriers = junctionBarriers;
          // Option 2 params.junctionBarriers = JSON.parse(params.junctionBarriers);
           // printing the object in the console (Please look at attached image)
          console.log(params.junctionBarriers);
    
          var value = [];
          var data = params.junctionBarriers.map(function (s) {
             value.push(webMercatorUtils.xyToLngLat(s.x, s.y, true));
              return s;
          })
    

答案 3 :(得分:1)

不要检查带有console.log()的数组,你有一个名为Array.isArray(myArray)的方法会返回truefalse,具体取决于你的变量是否为数组。

实际上,您将junctionBarriers转换为字符串,因此params.junctionBarriers是一个字符串,而您无法对字符串执行.map()

尝试始终查看文档: