【问题标题】:Can someone explain me the second part of this code please?有人可以解释一下这段代码的第二部分吗?
【发布时间】:2021-03-29 18:54:29
【问题描述】:
let a = [101, 103, 222, 97, 105];

var i = 0;
a.forEach(function(v){
  v == 97 || v == 101 || v == 105 || v==111 || v ==117 ? a[i++] = String .fromCharCode(v) : a[i++] = v;}),a;


console.log(a);

结果:['e', 103, 222, 'a', 'i']

我明白我们正在遍历数组并寻找任何匹配的值,我知道其余代码的作用,但我不明白 ? 之后的部分。

【问题讨论】:

  • 它正在检查数组中的每个索引,并将当前索引替换为给定的 ascii 字符值,然后递增索引。示例:索引 = 0;并且 v == 101 为真,因此,a[index] = char(101),即 'e',然后故意增加索引,因此现在 index = 1,但 foreach 循环将内部增加索引,因此留下 a[1]照原样,现在 index = 2. 依此类推
  • 三元运算符的true部分是存储当前索引对应的字符的值,而false部分只是存储数字。
  • 知道了。谢谢!

标签: javascript arrays foreach


【解决方案1】:

三元运算符只是一种奇怪(或缩小)的说法:

if (v == 97 || v == 101 || v == 105 || v==111 || v ==117) {
    a[i] = String.fromCharCode(v); // The character represented by the number v. e.g 97 => 'a'
} else {
    a[i] = v; // The number v without any conversion
}
i++;

【讨论】:

  • 谢谢。但是如果我们要这样写,我们需要在 if 语句之前执行一个 for 循环,对吗?
  • 它可以留在同一个地方 - .forEach 已经充当了数组的循环。
【解决方案2】:

您的代码正在检查数组中的元音代码,如果匹配,则替换为文本表示,否则替换为数字。

您的代码的简化版本(如果您理解this)-

let a = [101, 103, 222, 97, 105];

a.forEach(function(v, i){ 
   this[i] = (v == 97 || v == 101 || v == 105 || v==111 || v ==117) ? String.fromCharCode(v) : v;
}, a);

console.log(a);

您的代码有 - a[i++] = v;}),a; 我认为 ,a 指的是 foreach() 循环的第二个参数。

【讨论】:

    【解决方案3】:

    我会这样写。基本上有些数字会被字符替换。

    let a = [101, 103, 222, 97, 105];
    
    for (i = 0; i < a.length; i++) {
      if ([97, 101, 105, 111, 117].includes(a[i])) {
        // Replace int with char
        a[i] = String.fromCharCode(a[i])
      }
    }
    
    console.log(a);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多