【问题标题】:If condition vs loop one item如果条件vs循环一项
【发布时间】:2020-05-02 08:27:08
【问题描述】:

我只是好奇,是否值得在循环某个数组之前有 if 条件,在 90% 中将是 1 个项目的数组? 代码示例:

const a = [3];
const aLength = a.length;
if(aLength > 1) {
    for(let i = 0; i < aLength; i++) {
        func(i);
    } 
} else {
    func();
}

function func(position = 0) {
  console.log('hi' + position);
}

【问题讨论】:

  • 代码反映您的意图更为重要。不用担心微小的性能问题。
  • @Pointy 我也对不良/良好的代码实践感兴趣,也许它是被禁止的或专有技术,只是想知道。
  • 在这种特殊情况下,我认为区分这两种情况更具可读性。 1 元素数组不是特殊情况(即,如果您不强制 使其看起来像特殊情况,它的行为方式完全相同),并且它的行为方式与更大的数组。
  • 去掉 if else 会使代码更短、更易读、更高效。

标签: javascript loops if-statement optimization


【解决方案1】:

我同意 Federico 的评论,在这种情况下,单个 for 循环是最易读的。

另外,即使你重复使用它,将 a.length 提取到 aLength 中也没多大意义


const a = [3];
for(let i = 0; i < a.length; i++) {
    func(i);
} 

function func(position) {
  console.log('hi' + position);
}

警告:非常个人的观点,你也可以用 cmets 达到同样的清晰度。

好吧,除非单元素案例在您的领域中具有非常特定的含义。在这种情况下,我会用两个名称非常具体的函数将它们分开,如下所示:

const a = [3];
if(a.length > 1) {
    handleMultiple(a);
} else {
    handleSingleAndWhyItIsASpecialCase(a)
}

handleMultiple(array) {    
    for(let i = 0; i < array.length; i++) {
        func(i);
    } 
}

handleSingleAndWhyItIsASpecialCase(array) {   
    func();
}

function func(position = 0) {
  console.log('hi' + position);
}

正如哈米德在下面所说的,您可以轻松地将其变成单线:

[45,63,77].forEach((element, index) =&gt; console.log(index));

考虑使用 forEach 而不是 map 来明确你的意图。

【讨论】:

    【解决方案2】:

    编写干净的代码,让每个人都开心。

    你可以消除 if 和循环:

       const a=[5,6,3]
       a.forEach((value,index)=>console.log('hi'+index));

    【讨论】:

    • 为什么是map 而不是forEach
    • 是的,forEach 更适合这个例子。
    猜你喜欢
    • 2023-03-30
    • 2012-03-16
    • 2021-09-30
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2016-03-18
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多