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

.map() is not a function Error on Mapping Dynamically created Object

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

          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 is not a function

正如您从图像中看到的那样,params.junctionBarriers 是动态加载的,但 .map() 无效。为什么会这样,我该如何解决?

Look at the documentation for dojo.toJson

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

一个字符串没有方法映射

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

实际上是 dojo.toJson() is the same as JSON.stringify(),它在这里将您的 array 转换为 JSON string。所以问题是你试图在 string.

上调用 .map()

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

params.junctionBarriers.map is not a function

因此,在将 object 转换为 JSON string.

之前,您需要进行 .map() 调用
  • 选项 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;
          })
    

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

实际上,您将 junctionBarriers 转换为字符串,因此 params.junctionBarriers 是一个字符串,您不能将 .map() 转换为字符串。

尽量查看文档: