2011-07-17 56 views
0
var uniqueProperties = [];  
for (var i = 0, length = obj.length; i < length; i++) { 
     for (var prop in obj[i]) { 
      if (prop == null || prop == ' ') { 
       delete obj[i][prop]; 
      } 
     } 
     for (var prop in obj[i]) { 
      if (this.uniqueProperties.indexOf(prop) === -1) { 
       this.uniqueProperties.push(prop); 
      } 
     } 

    } 

我想先刪除空值或空值的鍵,然後將它們添加到數組中並檢查其長度。刪除對象數組中的鍵並檢查其長度

我認爲它沒有被清除。

+0

我認爲你正在做正確的方法。但是,要想真正幫助自己的,使用Firefox螢火,和你的for循環,輸出信息的內部自己與控制檯這樣的: 的console.log(「道具:」 +道具); 或 的console.log(uniqueProperties); ......這樣的 – Kristian

+0

東西你爲什麼不使用對象的屬性名稱的獨特性? – Gumbo

回答

1

在第一個循環,你檢查,看看是否「託」爲空或(錯誤地)空字符串,但並沒有真正意義。通過一個單獨的對象

if (obj[i][prop] == null || obj[i][prop] == '') 
     delete obj[i][prop]; 

而且,你的「uniqeProperties」名單也應該「幫助」,這樣就可以避免窮人:你應該檢查該財產「的obj [I]」的重複線性掃描的算法的性能:

var uniqueProperties = [], uniqueMap = {}; 

    // ... 

    for (var prop in obj[i]) { 
     if (!this.uniqueMap[prop]) { 
      this.uniqueMap[prop] = true; 
      uniqueProperties.push(prop); 
     } 
    } 
+0

什麼是重複線性掃描,以及uniqueMap對象在這種情況下做了什麼...爲什麼它聲明爲true。 –

+0

這是一種使用內部對象屬性映射代碼的效率的方法,以更快的方式確定字符串是否在一組字符串中。使用「indexOf」搜索數組是一種「線性」搜索,因爲代碼必須逐個檢查列表中的每個元素,並且您會爲每個屬性執行此操作。使用地圖可以加快速度,特別是如果有很多這樣的屬性。 – Pointy

+0

@Pointy:你能給出一個理由,我的帖子,我只是想知道你爲什麼要刪除...... – Thalaivar

0

要刪除鍵爲什麼....

for (var key in object) { 

    if (!object.hasOwnProperty(key)) { 
     continue; 
    } //to skip inherited properties 
    if (!key[object]) { 
     continue; 
    } //skip null or blank values 
} 

delete obj[i][propertyName]是糟糕的編碼習慣。您不應直接在傳入數據中刪除屬性,因爲結果有時可能無法預測,並會在調試階段造成很多麻煩。