代码之家  ›  专栏  ›  技术社区  ›  E Alexis MT

我写了这段代码,但我不明白JavaScript是如何处理交换的???(我以前在一篇文章中看到过,但没有解释)

  •  -2
  • E Alexis MT  · 技术社区  · 2 周前

    以下JavaScript中我想理解的内容的名称或官方术语是什么??

    我从来没有找到一篇明确的文章来解释数组在交换数字时在幕后的作用(如果我没有错的话,我认为这是替换值的一种简单方法)。

    const swapNumbers = (numbers: number[]) => {
      const swap = numbers.map((x: number, index: number) =>
        index % 2 !== 0 ? numbers[index - 1] : index === numbers.length - 1 && numbers.length % 2 !== 0 ? numbers[index] : numbers[index + 1]);
    
      console.log(swap);
    };
    
    swapNumbers([1, 2, 3, 4]);
    swapNumbers([1, 2, 5, 6, 8]);

    我想了解这到底在做什么(我想了解很长一段路)。。。这是吗 numbers[index + 1] (短距离,将下一个数字排成一行)与此(长距离)相同 numbers[index + 1] = numbers[index] or numbers[index + 1] = x ?

    能够做到这一点的条件是什么?( 它只存在于map和其他es6函数中吗?或者我可以在正则for循环中使用它吗?例如。 numbers[index - 1]; ? )

    1 回复  |  直到 2 周前
        1
  •  1
  •   001    2 周前

    这是用长格式写的。

    const swapNumbers = (numbers) => {
      const swap = numbers.map((x, index) => 
      index % 2 !== 0 ? numbers[index - 1] : index === numbers.length - 1 && numbers.length % 2 !== 0 ? numbers[index] : numbers[index + 1]);
    
      console.log(swap);
    };
    
    const swapNumbers2 = (numbers) => {
        let swap= [];
        for (let index = 0; index < numbers.length; index++) {
            if (index % 2 !== 0) {
                swap.push(numbers[index - 1]);
            }
            else if (index === numbers.length - 1 && numbers.length % 2 !== 0) {
                swap.push(numbers[index]);
            }
            else {
                swap.push(numbers[index + 1]);
            }
        }
        console.log(swap);
    }
    
    swapNumbers([1,2,3,4]);
    swapNumbers2([1,2,3,4]);
    swapNumbers([1, 2, 5, 6, 8]);
    swapNumbers2([1, 2, 5, 6, 8]);
        2
  •  0
  •   Carsten Massmann    2 周前

    以下是Vanilla JavaScript中一个更简单的替代方案(就地交换):

    const swap=nums=>
      (nums.forEach((x,i,a)=>{
        if(i%2) [a[i-1],a[i]]=[x,a[i-1]]
      }),nums);
    
    [[1,2,3,4],[1,2,5,6,8]].map(a=>
      console.log(swap(a)));