javascript - 对象数组,当我寻找最大值时,使我的代码可读的最佳实践是什么

标签 javascript code-cleanup

我有这段代码,它从对象数组中查找最大值,其中数字是字符串的一部分:

var stringArray = [
{ name: 'string 1' },
{ name: 'string 2' },
{ name: 'string 11' },
{ name: 'string 3' },
{ name: 'string 10' }
];
var customModuleRe = new RegExp('\\d+');
var getCustomModuleNumber = function () {
    var max = 0;
    for (var i = 0; i < stringArray .length; i++) {
        var current = customModuleRe.exec(stringArray [i].name);
        if (current) {
            var num = parseInt(current[0]);
            if (!isNaN(num) && num > max) {
                max = num;
            }
        }
    }
    return max;
};

我必须将此代码更改为干净、最优、可读、与ES6兼容。 、清洁度和代码质量。例如我需要使用:

for (let i = 0, j = stringArray.length; i < j; i++)

而不是:

for (var i = 0; i < stringArray .length; i++)

您能找到更多信息并解释一下为什么我需要这样做吗?这段代码应该是最快的,并且符合良好的代码规则。

最佳答案

一些高级建议:

  • 如果存在可以完成这项工作的数组原型(prototype),则不要使用 for 循环:例如Array.map 和 Math.reduce。这个想法是消除循环迭代器临时变量。有时,当您找到最合适的数组原型(prototype)方法时,您会发现像 i 这样的循环迭代器变得不必要。找到正确的迭代器方法可能是一个真正的 gem ,并且可以节省大量代码。
  • 使用 Math.max 代替 if 语句。这里的想法是,大多数时候我们在整个代码中都以 if 语句开始。最终,当我们学会更好地利用 javascript 时,我们发现我们不需要它。
  • 使用apply使Math.max在列表上工作。大多数 javascript 函数都适用于参数和数组。数组形式通常难以阅读并且容易被忽视,但可以节省大量时间。 Math.max.apply
  • 使用正则表达式捕获组,例如/(\\d+)/,这将为您解析字符串并提取数字部分。这是在 v8 引擎中完成的,无需您在 javascript 中进行繁重的工作
  • 不需要 Regexp 对象,您可以在代码中直接使用 regexp,取消引用字符串并使用斜杠。

以上是一般规则。我可以想出多种解决方案来解决您的问题:

  1. Array.map、正则表达式、parseInt、Math.max.apply
  2. Array.reduce、正则表达式、parseInt、Math.max

您可以将正则表达式替换为 split,正如另一个 OP 所发布的那样。

解决方案有很多。

我最喜欢的是 Math.reduce,因为它将数组压缩为单个结果。但您面临的挑战是弄清楚它,因为该语法不欢迎新手。

关于javascript - 对象数组,当我寻找最大值时,使我的代码可读的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867921/

相关文章:

javascript - 删除正文中的元素 &lt;script&gt;

javascript - iziModal - 使用 jquery/javascript 重置模态标题

javascript - 使用 Restangular 创建面向对象的 AngularJS 模型

makefile - make clean、make clobber、make distclean、make mrproper 和 make realclean 之间有什么区别?

javascript - 从 FormData 对象中排除不可见的表单元素

javascript - 日期未在数据库中保存正确的值

javascript - 当元素的显示从 "none"变为 "block"时按钮移动

TypeScript 接口(interface)模板

reference - 如何在 csproj 中找到不需要的 PackageReference

whitespace - Sublime Text 2 : Trim trailing white space on demand