2013-03-12 42 views
2

希望有人能在jQuery的幫助,如果我有一個鍵值數組對象如何在jquery/javascript中的鍵/值數組中的特定點處插入鍵值對?

var myArray= {}; 
    myArray['key1'] = 'value1'; 
    myArray['key2'] = 'value2'; 
    myArray['key3'] = 'value3'; 
    myArray['key5'] = 'value5'; 
    myArray['key6'] = 'value6'; 

我怎麼會在特定點插入另一鍵值對? 例如 myArray ['key4'] ='value4'; (或之後)key2和(或之前)key3之間的密鑰( )?

謝謝

+2

這不是一個數組,它是一個對象。在Javascript中,您可以使用與數組值相同的語法訪問對象成員(使用方括號),但它不會使對象和數組成爲同一個對象。 – 2013-03-12 12:01:23

回答

5

有ECMAScript中沒有保證的順序對象,因此,沒有辦法在某一點插入一個新鍵/值對

改爲使用陣列

var arr = ['value1', 'value2', 'value3', 'value4', 'value5', 'value6']; 

arr.splice(2, 0, 'new value'); 

console.log(arr); // ['value1', 'value2', 'new value' 'value3', 'value4', 'value5', 'value6']; 
+1

應該是'arr.splice(2,0,'new value');'因爲你不想刪除任何現有的元素。 – 2013-03-12 11:59:21

+0

@AnthonyGrist:你說得對,修正了那個。 – jAndy 2013-03-12 12:00:00

+1

應該強調的是,數組的屬性不是有序的,因爲數組是對象。但是,它們通常是** read **,依次使用for(或while或do)循環。使用'splice'可以改變索引等於或高於新屬性索引的屬性名稱。 – RobG 2013-03-12 12:10:06

2

你有什麼是對象({}),而不是一個數組([])。對象中的鍵不具有保證的順序,所以您不能在特定點插入一個;它們只是該對象的屬性。

-1

正如jAndy所說,如果您想要特定的訂單,請使用數組。

或者,您可以在使用前對鍵進行排序,如果它們有可排序的名稱(如您的示例中所示)。

0

做到這樣,使用對象:

var myArray = {key1: value1, key2: value2}; 

新增:

myArray.key3 = "value3"; 
1

感謝您的意見。我希望他們相當於拼接我錯過的物品。顯然不是我用舊的地圖和重建。

function objectInsertafterkey(object, newKey, newVal, insertAfterkey){ 
newObject={}; 
$.map(object, function(value, key) {  
if(key == insertAfterkey){ 
newObject[key] = value; 
newObject[newKey] = newVal; 
} 
else 
{ 
newObject[key] = value; 
} 
}); 
return newObject; 
} 

如果他們是一個更好的方式插入對象隨時讓我知道。

相關問題