2016-02-09 87 views
1

我想將一個數組的值複製到另一個數組中,但沒有打破與此數組關聯的鏈接其他詞我不能只將新數組分配給這個值,這就是爲什麼我不能使用像slice()或concat()這樣的方法。 這裏是做事情的函數的代碼:刪除元素後,javascript數組的長度不會改變

self.updateBreadcrumbs = function (newBreadcrumbs) { 
      var old_length = self.breadcrumbs.length; 
      var new_length =newBreadcrumbs.length; 
      var j = new_length > old_length ? new_length: old_length; 

      for (var i = 0; i < j; i++) { 
       if(old_length < i+1){ 
        self.breadcrumbs.push(newBreadcrumbs[i]); 
        continue; 
       } 
       if(new_length < i+1){ 
        delete self.breadcrumbs[i]; 
        continue; 
       } 
       if (self.breadcrumbs[i].title !== newBreadcrumbs[i].title) { 
        self.breadcrumbs[i] = newBreadcrumbs[i]; 
       } 

      } 
     } 

我的問題是數組的長度是當我從陣列中刪除的東西不會改變。

P.S如果你知道任何更簡單的方法來做到這一點,我完全接受命題。

+2

刪除像一個元件不應該改變所述陣列的長度。 – Pointy

+0

您正在刪除數組所持有的對象。陣列不受影響。 –

+0

這個功能有什麼意義?爲什麼不簡單地'self.breadcrumbs = newBreadcrumbs'? – georg

回答

8

通過刪除其中的元素,數組的長度永遠不會改變。

但是,它可以改變與splice 例如。

var arr=[1,2,3,4,5]; //length 5 
arr.splice(0,1); //length 4 

與常見的看法不同,delete運算符與直接釋放內存無關。 delete僅對對象的屬性有效。其對陣列長度

剪接()方法改變陣列的通過去除現有 元件和/或添加新元素的含量沒有影響。

進一步瞭解Splice

+0

但是slice()會返回新的數組,不是它,如果是這種情況它不適合在這種情況下 –

+1

它的**拼接**不是**切片** –

+0

yeh沒有注意到,非常感謝 ! –

2

一個Array對象的屬性length是受它的方法維護的屬性,它是不是對象本身的固有特性。所以,如果你採取的行動不是Array自己的方法之一,它不會更新length屬性。在這種情況下,您想要使用的方法是splicehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

有趣的是,您可以通過直接更改數組的長度來更改數組的組成。 。 。例如,如果您有一個包含6個元素的數組,並且您將其length屬性更改爲5(即,array.length = 5;),則它不再將第6個元素識別爲數組的一部分。

更多關於length屬性:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length