使用Array.map作为foreach的良好做法?

时间:2016-02-24 16:09:00

标签: javascript arrays

我已经使用了Array.map,但是使用相同的数据,我需要做一些其他的计算。我应该在地图中进行这些计算,还是在地图之后为每个进行计算?

    return res.data.map(function (obj) {
        if(obj.status.id == 6 || obj.status.id == 5){
            dateDifference(obj.created_at,obj.closed_at);
        }else{
            $scope.open++;
        }
        return {
            "id":obj.id,
            "subject": obj.subject,
            "requester": obj.requester.name,
            "assigned": obj.assigned ? obj.assigned.name : '',
            "priority": obj.priority.name,
            "status": obj.status.name,
            "category": obj.category.name,
            "created_at": moment(obj.created_at).utcOffset("06:00").format('lll'),
            "updated_at": moment(obj.updated_at).utcOffset("06:00").format('lll')
        }
     })

1 个答案:

答案 0 :(得分:1)

我不认为这是一种“好习惯”,但我也不认为这是一种不好的做法。事实是,.map()旨在迭代并创建一个新的结果数组。

也许答案在于它的定义。

来自JS website

  

“map()方法创建一个新数组,其中包含调用a的结果   为这个数组中的每个元素提供了函数。“

来自PHP website(为了好玩):

  

“array_map()返回一个包含array1所有元素的数组   将回调函数应用于每个函数后。“

没有什么能阻止你在回调函数中做你想做的事。

如果你个人觉得这样做不舒服,你可以在构建自己的新阵列时为每个人做一个同样的事情。这可能是我在你的具体情况下会做的。我宁愿这样做,也不必在我的阵列上迭代2次。

尽管如Bergi所提到的,如果它在语义上有意义,那么在数组上迭代两次是更好的做法。

如果性能成为一个问题(在长数组上迭代两次)。以下是我倾向于做的事情:

for (var i=0; i<myArray.length; i++) {
    doStuffA(myArray[i]);
    doStuffB(myArray[i]);
}

在语义上非常清楚。而不是迭代两次。

当然,有些人可能(很可能)不同意我的观点。