Sort()正在变异我的原始数组。有其他解决方法吗?

时间:2019-11-08 16:08:49

标签: javascript

我搜索了其他线程,但找不到解决我问题的可行解决方案。我尝试了slice()作为数组,但是没有运气。我有一个数组,首先创建原始数组的副本,几秒钟后,我覆盖了一个值[0] [1] = 555。这会影响我的副本/原始数组,值1000被555覆盖。关于如何克服此问题的任何想法?值更改后,我需要比较两个表。这是我的JavaScript代码:

let intialstationtablevalues = [
["station name 1",75,100,100,100,100,100,100,0,100,100,100,100,1],
["station name 2",200,220,100,100,100,100,100,2,100,100,100,100,2],
["station name 3",300,110,100,100,100,100,100,0,100,100,100,760,3],
["station name 4",400,100,109,100,100,100,100,3,100,100,100,100,4],
["station name 5",500,100,100,100,100,100,100,0,100,100,100,100,5],
["station name 6",600,130,134,100,100,100,100,2,100,100,100,340,6],
["station name 7",700,100,100,100,100,100,100,0,100,100,100,100,7],
["station name 8",800,200,340,100,100,100,100,5,100,100,100,10,8],
["station name 9",900,100,100,100,100,100,100,0,100,100,100,6,9],
["station name 10",1000,100,900,100,100,100,100,2,100,100,100,100,10],
];
let old = []
let copy = []


setInterval(read,2000)
setTimeout(changevalue,10000)

function changevalue(){
  console.log("value changed")
  intialstationtablevalues[0][1]=555;
}


function read(){
        if(copy==""){
            copy = intialstationtablevalues.slice()
      }
        sortnow = intialstationtablevalues.sort(function(a,b){
            return b[1]-a[1];
        })

        console.log("sortnow",sortnow)

        if(old==""){
            copy.forEach(function(item,index){
                old.push(item)
            })
            old.sort(function(a,b){
                return b[1]-a[1];
            })
        }

        console.log("old",old)
}

2 个答案:

答案 0 :(得分:1)

sortedArray = [...arrayYouWantToSort].sort()将要复制的数组传播到新数组中,然后对该数组进行排序。有趣的方式!

sortedArray = [...arrayYouWantToSort];
sortedArray[0][1] = whatever // whatever you wanna change
sortedArray.sort()

要点是,将arrayYouWantToSort扩展到新的数组文字中会在内存中创建一个新的数组。因此,arrayYouWantToSortsortedArray现在总共是内存的不同物理部分,但是它们具有相同的“值”。因此,您可以更改其中一个的值而不会影响另一个。

因此,您首先创建复制的数组,然后对新数组进行突变。

答案 1 :(得分:-1)

我认为.slice()在这里工作正常,请尝试将if语句替换为

if(copy.length ===0)

检查空数组