【问题标题】:One line Array iterator javascript单行数组迭代器javascript
【发布时间】:2022-01-12 21:22:49
【问题描述】:

我来自 Python,我正在为任何数组寻找一个单行迭代器函数,我可以在其中还检查条件并返回 em> 对项目进行简单的更改。

预期结果应该与方法匹配:

function arrayEvenItemIncrement(myArray){
    for (let i = 0; i < myArray.length; i++){
        if (myArray[i]%2==0){
            myArray[i]++;
        }
    }
    return myArray;
}

我尝试使用for (i of myArray){ },但这仍然不能满足我的目的。

【问题讨论】:

  • 你读过docs吗?
  • myArray.map(a => a%2 ? a : a++);
  • 你能展示你会使用的示例 python 代码吗?
  • 如果您觉得需要,只需在一行上写上for (let i = 0; i &lt; myArray.length; i++) if (myArray[i]%2==0) myArray[i]++;。没有错。

标签: javascript arrays for-loop iterator idioms


【解决方案1】:

我认为在这里做你想做的最清晰的方法是映射到一个新数组而不是改变旧数组:

const arrayEvenItemIncrement = myArray =>
  myArray.map((val, i) => i % 2 === 1 ? val : val + 1);

如果你必须改变现有数组,它会变得更加丑陋。

const arrayEvenItemIncrement = myArray => (
  myArray.forEach((val, i) => { if (i % 2 === 0) myArray[i]++; }), myArray);

const arrayEvenItemIncrement = myArray => {
  myArray.forEach((val, i) => { if (i % 2 === 0) myArray[i]++; }); return myArray };

但我不建议这样做 - 改为多行。

从技术上讲,您可以将任何 JS 代码压缩到一行中,但过去的简单操作通常不是一个好主意,因为它牺牲了可读性,这比减少 LoC 重要得多。专业、可维护的代码不是打高尔夫球的比赛。

【讨论】:

  • 我将采用 forEach 方法。
【解决方案2】:

感谢您的回答。 我已经解决了这个问题:

myArray.forEach(el=&gt;el%2===0?newArray.push(el):null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2017-03-29
    • 2018-04-06
    相关资源
    最近更新 更多