我搜索了其他线程,但找不到解决我问题的可行解决方案。我尝试了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)
}
答案 0 :(得分:1)
sortedArray = [...arrayYouWantToSort].sort()
将要复制的数组传播到新数组中,然后对该数组进行排序。有趣的方式!
sortedArray = [...arrayYouWantToSort];
sortedArray[0][1] = whatever // whatever you wanna change
sortedArray.sort()
要点是,将arrayYouWantToSort
扩展到新的数组文字中会在内存中创建一个新的数组。因此,arrayYouWantToSort
和sortedArray
现在总共是内存的不同物理部分,但是它们具有相同的“值”。因此,您可以更改其中一个的值而不会影响另一个。
因此,您首先创建复制的数组,然后对新数组进行突变。
答案 1 :(得分:-1)
我认为.slice()在这里工作正常,请尝试将if语句替换为
if(copy.length ===0)
检查空数组