在迭代对象数组时替换为for循环

时间:2019-05-15 06:42:48

标签: javascript arrays loops object optimization

我有一个for循环,该循环遍历对象数组,并为数组中的每个对象返回一个格式化对象的方法。

我想知道是否有更好的替代for循环,而不是我在这里使用的'forEach'。 你能建议点什么吗?

代码如下:

for (var index = 0; index < arrItems.length; index++) {
  return formatObj(arrItems[index]);
}

每个替代:

var formattedObj;
arrItems.forEach(function (item) {
  formattedObj = formatObj(item);
});
return formattedObj;

注意:我已经在else条件中运行了这个循环。

3 个答案:

答案 0 :(得分:2)

仅将formatObj传递到forEach可能很容易:

arrItems.forEach(formatObj);

没有return,没有索引处理,什么也没有。

答案 1 :(得分:0)

尝试一下

formattedObj = arrItems.map(fo=>formatObj(fo))

答案 2 :(得分:0)

此代码:

for (var index = 0; index < arrItems.length; index++) {
  return formatObj(arrItems[index]);
}

将返回格式化数组中的第一个对象的结果。

此代码:

var formattedObj;
arrItems.forEach(function (item) {
  formattedObj = formatObj(item);
});
return formattedObj;

将返回格式化数组中的最后一个对象的结果。

您是否要就地格式化数组?

在这种情况下,您应该知道JS对象是通过引用传递的,因此您可以在被调用函数中对其进行修改,并且它们也将在您的数组中进行更改。因此您的代码可以更改为:

arrItems.forEach(item => formatObj(item));
return arrItems;

或者,因为forEach方法接受带有第一个参数作为项目的函数,所以您可以直接传递该函数:

arrItems.forEach(formatObj);
return arrItems;

“更好”是一个非常主观的术语。在什么意义上更好?

您使用的方法是用于迭代一系列项目的标准JS,并且根据运行代码的JS引擎,必须以优化的方式实现。