通过.map问题转换对象数组

时间:2018-07-08 03:06:31

标签: javascript

我正在尝试转换对象数组:

[
    {
        "url":"link1",
        "id":2,
        "$$hashKey":"object:293"
    },
    {
        "url":"link2",
        "id":2,
        "$$hashKey":"object:300"
    }
]

变成这样的简单数组

["link1","link2"]

以前我是使用.map函数来执行此操作的,但是在此示例中,此代码是

for(var i = 0, l = $scope.screenshots.rest.length; i < l; i++) {
    photos = photosJson[i].map(function (photo) {
        return photo['url'];
    });
}

给我错误:

  

TypeError:photosJson [i] .map不是函数


我尝试使用答案中的代码,但仍然存在相同的错误,因此我进行了更多调试:

现在基本上的代码是:

console.log($scope.screenshots.rest);
console.log('-----');
var photosJson = JSON.stringify($scope.screenshots.rest);
console.log(photosJson);
console.log('-----');
if(photosJson) {
    console.log(photosJson.map(photo => photo.url));
}

的输出是:

img

这很奇怪。也许这与在异步后端调用之后将那些链接放入数组中的对象有关。但是我不认为是因为上面的代码在用户上传图像后在提交表单上执行,并且用户提交表单时图像链接已经在对象中。


好的。我发现在.map之前不能使用JSON.stringify。

2 个答案:

答案 0 :(得分:2)

您应该单独使用.map ,而不是嵌套在另一个for循环中:

const photos = [
    {
        "url":"link1",
        "id":2,
        "$$hashKey":"object:293"
    },
    {
        "url":"link2",
        "id":2,
        "$$hashKey":"object:300"
    }
];
console.log(
  photos.map(photo => photo.url)
);

当您具有多维数组时,可以将.map(或某些迭代方法)嵌套在另一个迭代方法中,但这不是这种情况。

答案 1 :(得分:1)

当数据为空时,可能会发生这种情况,只需在循环内添加一个null / empty检查,

for(var i = 0, l = $scope.screenshots.rest.length; i < l; i++) {
  if(photosJson && photosJson[i]){
  photos = photosJson[i].map(function (photo) {
        return photo['url'];
    });
  }
}

或者简单地,您可以无循环执行

photos = photosJson.map(photo => photo.url)