我已经使用了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')
}
})
答案 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]);
}
在语义上非常清楚。而不是迭代两次。
当然,有些人可能(很可能)不同意我的观点。