2011-01-25 74 views
0

我有一個看起來像這樣的對象。關聯數組元素與對象字段相同嗎?

var obj = { 
    speed: 10, 
    volume: 14, 
    aux_deform: 1.8, 
    energy: 21.5, 
    aux_energy: 0.2 
} 

在運行時會添加額外的字段/屬性,因此該對象在任何給定時間都可以包含任意數量的屬性。正如你在我的對象例子中看到的,一些屬性可以以「aux_」開頭。

現在,我想從這個僅包含以「aux_」開始的屬性創建另一個對象。

我現在做的方式是這樣的。

var newObj = []; 
for(prop in obj) 
{ 
    if (prop.startsWith('aux_')) 
    { 
     newObj[prop] = obj[prop]; 
    } 
} 

現在我有一個新的對象,我可以這樣做:

alert(newObj.aux_energy); 

這工作不錯,但我想知道如果這是正確的做法。有沒有更簡單的方法,或者我想要實現的更優雅的方式?這種創建對象的方式是否存在任何(安全或技術)問題/問題?

而且從標題的問題:是新創建的對象實際上屬性的關聯數組作爲鍵(因爲它創建的方式)或是否有任何區別。

+0

在JS中沒有像關聯數組這樣的東西。 – kapa 2011-01-25 10:12:27

回答

3

有在Java腳本沒有關聯數組,有可替代的關聯數組只能使用JSON對象。你在這裏做的是你已經聲明瞭一個名爲newObj的數組,然後向這個數組添加屬性。當試圖在Array方法中使用buit或迭代它時,它可能會導致意外的行爲。 JSON對象和數組之間的主要區別在於對象中的屬性不可排序,並且遍歷它們會產生隨機和不可預知的輸出。

寫一個更合適的方式將申報對象newObj = {},然後就抄你需要的屬性。

需要注意的一點 - 如果你將有數組或對象作爲屬性的值,你會引用複製到這些對象。如果您希望能夠獨立於原始對象編輯這些值,則必須深度複製這些值 - 請檢查此問題以瞭解如何使用該值What is the most efficient way to deep clone an object in JavaScript?

除此之外,它是唯一的方法這很好。

+0

是的,我知道參考作業。感謝您的意見。這就是我需要的。 – 2011-01-25 12:03:22