2013-12-09 28 views
3

是否可以刪除某個位置的數組元素,而不重新排列索引,並且沒有將該位置更改爲未定義?如何刪除沒有拼接的數組元素,而沒有未定義的剩餘?

我不認爲這是可能的刪除或拼接?

我需要一個精確的方式來查看數組的長度,而無需重新排列索引。

我不想使用拼接,因爲我有一個對象具有映射到實際的X,Y點的表格(Punkt)的特定位置。

更新:實際上,知道數組元素是否存在於只有未定義的值也可以幫助我,有沒有更容易的方法,然後循環?

var keys = Object.keys(racks); 
for (var i = 0; i < keys.length; i++) 
{ 
    for (var x = 0; x < racks[keys[i]].punkt.length; x++) 
    { 
     if(racks[keys[i]].punkt[x].y == fullName) 
     { 
      //delete racks[keys[i]].punkt[x]; 
      racks[keys[i]].punkt.splice(x,1); 
      console.log(keys[i] + " : " + racks[keys[i]].punkt.length); 
     } 
    } 
} 
+1

你可以,但你不能只用一個數組。 – rdodev

+1

爲什麼你不需要一個名爲'arraylength'的變量,每次元素被添加到數組中時都會增加一個變量,但是當元素被移除時不會改變。 – Andy

+0

爲什麼你不想使用拼接? http://stackoverflow.com/questions/500606/javascript-array-delete-elements – Jurik

回答

4

我不認爲這是可能的刪除也不拼接?

我需要一個精確的方式來查看數組的長度,而無需重新排列索引。

然後delete,從數組中檢索時,以及環路計數元件(或一個單獨的變量保持跟蹤)一個hasOwnPropertyin後衛是做到這一點的唯一途徑。 JavaScript的標準陣列本質上是稀疏(因爲他們是not really arrays at all),他們可以有他們沒有條目的空白。要創建間隙,請使用delete刪除陣列條目。

實施例:

// Setup 
var a = ["a", "b", "c", "d"]; 
console.log(a.length); // 4 

// Using delete 
delete a[2];   // Delete the entry containing "c" 
console.log(a.length); // Still 4 
a.hasOwnProperty(2); // false 

// Using the guard when getting an entry 
if (a.hasOwnProperty(2)) { // Or `if (2 in a)` 
    // Get and use [2] 
} 
else { 
    // Do whatever it is you want to do when the array doesn't have the entry 
} 

// Finding out how many it *really* has: 
var key; 
var count = 0; 
for (key in a) { 
    if (a.hasOwnProperty(key) &&  // See below 
     /^0$|^[1-9]\d*$/.test(key) && 
     key <= 4294967294 
     ) { 
     ++count; 
    } 
} 
console.log(count); // 3 

在迴路if背後的細節見this other answer。如果您從不在數組中放置非元素屬性,則可以跳過該if的第二部分和第三部分。

0
var punten = racks[keys[i]].punkt.length; 
          if(racks[keys[i]].punkt[x].y == fullName) 
          { 
           delete racks[keys[i]].punkt[x]; 
           punten--; 
          } 

          if(punten==0) 
          { 
           console.log("Could have removed device: " + keys[i]); 
          } 
1

這很好用。

var delrow = window.event.srcElement; 
    while ((delrow = delrow.parentElement) && delrow.tagName != "TR"); 
    delrow.parentElement.removeChild(delrow); 
相關問題