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

Is using an Array.map as a foreach good practice?

本文关键字:foreach 作为 Array map      更新时间:2023-09-26

我已经在使用 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')
        }
     })
我不

认为这是一种"好的做法",但我也不认为这是一种不好的做法。事实上,.map() 旨在迭代和创建新的结果数组。

也许答案就在于它的定义。

从JS网站:

"map() 方法创建一个新数组,其结果是调用 在此数组中的每个元素上提供了函数。

从PHP网站(为了好玩):

"array_map() 返回一个包含 array1 的所有元素的数组 在对每个人应用回调函数之后。

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

如果您个人不习惯这样做,那么在构建自己的新阵列时,您可以做一个"针对每个人"的事情。这可能是我在你的特定情况下会做的。我宁愿这样做,也不必在我的数组上迭代 2 次。

不过,正如Bergi所提到的,如果语义上有意义,那么在数组上迭代两次是一种更好的做法。

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

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

这在语义上很清楚。而不是迭代两次。

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