首页 > 其他分享 >对于 [arr[left], arr[right]] = [arr[right--], arr[left++]]; 的疑惑

对于 [arr[left], arr[right]] = [arr[right--], arr[left++]]; 的疑惑

时间:2023-08-25 23:36:10浏览次数:30  
标签:arr right -- ++ left 赋值

如题,当时博主正在写leetcode,要求原地改变数组

故声明双指针 left 和 right,对数组进行交换,即

 [arr[left], arr[right]] = [arr[right--], arr[left++]]; 

但是未得到预期的结果,随后进行了测试:

1 let arr = [1, 2, 3, 4, 5];
2 let left = 1, right = 3;
3 [arr[left], arr[right]] = [arr[right--], arr[left++]];
4 console.log(arr);
5 console.log(left, right);

预期结果:

 但运行结果:

 

分析:

1、left++ 和 right-- 均正常执行,那么可能是解构赋值的问题?

随即寻找解构赋值的原理,但未果。

后来仔细琢磨,感觉这玩意也比较简单,其实并没有什么深奥的原理,仅仅是对应位置的赋值罢了

2、既然如此,那就debugger,在第2行后插入 debugger; 

发现在左侧变量赋值之前,left 和 right 就已经改变了,那这么一来就很明了了

1 let arr = [1, 2, 3, 4, 5];
2 let left = 1, right = 3;
3 [arr[left++], arr[right--]] = [arr[right], arr[left]];
4 console.log(arr);
5 console.log(left, right);

 

真相:

赋值运算符是从右往左运行的,故指针的值先于数组改变

将 -- 和 ++ 放在赋值运算符左侧即可

标签:arr,right,--,++,left,赋值
From: https://www.cnblogs.com/Delusional-man/p/17658170.html

相关文章

  • P7 UVA11481 Arrange the Numbers
    UVA11481ArrangetheNumbers组合数问题。做法貌似很多,显然在前\(m\)个数中选\(k\)个,即\(C(m,k)\),然后后面有\(m-k\)个数需要保证不放在自己的位置上,所以后面整体是一个禁位问题,貌似可以用棋盘多项式去推禁位公式,但是暂时不会。不过还有另外一种思路,就是对于后面的\(n-......
  • 软件测试|web自动化测试神器playwright教程(三十七)
    使用Playwright的highlight()方法突出显示Web元素简介Playwright是一个强大的自动化测试工具,可以与Python集成,用于测试Web应用程序和执行自动化任务。其中,highlight()方法是Playwright的一个有用功能,可以突出显示Web页面上的元素,方便调试和可视化操作。本文将介绍Playwright库......
  • [CF1158F] Density of subarrays
    Let$c$besomepositiveinteger.Let'scallanarray$a_1,a_2,\ldots,a_n$ofpositiveintegers$c$-array,ifforall$i$condition$1\leqa_i\leqc$issatisfied.Let'scall$c$-array$b_1,b_2,\ldots,b_k$asubarray......
  • ArrayList和Vector及LinkedList的区别
    1.ArrayList和Vector的区别第一句话:ArrayList和Vector底层都是数组实现的,初始容量都为10;在ArrayList的底层,是通过定义一个DEFAULT_CAPACITY的常量来指定的,而Vector的底层,是直接在空参构造中,通过写死了一个this(10)来指定的;第二句话:Vector大部分方法的底层实现,都加了synchronized......
  • Leetcode 349.两个数组的交集(Intersection of two arrays)
    题目链接......
  • CF1749D Counting Arrays
    给定一个数组\(a\),同时给定一个操作:选取一个数字\(i\),如果\(\gcd(a_i,i)=1\),我们就可以将当前的第\(i\)位上的数字\(a_i\)移除掉,而后面的数字会以此补上空缺。定义一个序列\(b\)为一个“移除序列”,当且仅当我们可以通过依次选取\(b_1\)到\(b_n\)进行上面所说的操......
  • P9574 「TAOI-2」Break Through the Barrier
    思路首先我们可以肯定的是,无论如何变化,答案最多比原序列的连续\(T\)的个数多\(2\)。理由很简单,对于\(...BT...TB...\),最好的可能就是前后两个\(B\)可以变成\(T\),因为只可能是\(BTTB\)变成\(TBBT\),所以变了以后再外面就一定是\(B\)了,且无法再变。所以我们可以先找到......
  • CyclicBarrier、CountDownLatch和Semaphore区别
    CyclicBarrier、CountDownLatch和Semaphore都是Java并发编程中常用的同步工具,它们在功能和使用方式上有一些区别。CyclicBarrier:CyclicBarrier用于多个线程之间互相等待,直到所有线程都到达某个屏障点后才继续执行。CyclicBarrier可以重复使用,每次到达屏障时,它的计数器会自动......
  • starrocks
    一、StarRocks是开源的新一代极速全场景MPP数据库。它采用新一代的弹性MPP架构,可以高效支持大数据量级的多维分析、实时分析、高并发分析等多种数据分析场景。StarRocks性能出色,它采用了全面向量化技术,比同类产品平均快3-5倍。二、定位。原有的以Hadoop为核心的大数......
  • ios开发之--NSString和NSArray互转
    将string字符串转换为array数组NSArray*array=[StrcomponentsSeparatedByString:@","];//分隔符逗号将array数组转换为string字符串 NSString*tempString=[mutableArraycomponentsJoinedByString:@","];//分隔符逗号作者:稻草人11223......