2017-07-28 91 views
0

比方說,我有一個JSON名單如下:如果我不知道哪些鍵已經存在,如何將鍵值對添加到JSON列表的末尾?

var obj = {"1": "somevalue", "2": "someothervalue"};

我如何添加{"3": "somevalue"}對象動態?即不知道已經存在兩個密鑰。

我正在尋找一些查看JSON列表的JavaScript,然後在不意外覆蓋現有密鑰的情況下將密鑰添加到結尾。

我知道這裏有一個類似的問題:Checking if a key exists in a JavaScript object?但我想知道如何動態生成下一個數字鍵,例如上例中的「3」。

+0

另外,值得注意的還有如添加一鍵「結束」沒有這樣的事。對象的鍵是無序的 – m0meni

+1

[檢查一個JavaScript對象中是否存在鍵?]可能的重複?(https://stackoverflow.com/questions/1098040/checking-if-a-key-exists-in-a-javascript-對象) –

+0

如果標題是真的,那麼你會花費很多時間,因爲在檢查密鑰的存在之前,您必須先執行字符串處理或使用'JSON.parse()'。這可能看起來像有效的JSON,但這是一個JavaScript對象字面值,所以即使它在源代碼中被序列化,它也不會被實際序列化。 –

回答

0

只需

if(typeof obj[key] !== 'undefined') { 
    obj[key] = value 
} 

所以在你的腳本倒不如將它包裹在一個函數,像

function appendObj(obj, key, value) { 
    if (typeof obj !== 'undefined') { // lets make sure there is an obj first 
    if(typeof key!=='undefined' && key && typeof obj[key] !== 'undefined') { 
    obj[key] = value; 
    } 
    else { 
    obj.push(value); 
    } 
    } 
} 

那麼每當你需要A K/V添加到任何物體,

var myNewObj = {"1": "somevalue", "2": "someothervalue"}; 
appendObj(myNewObj, '4', 'new value') 
+0

你能解釋你的狀況檢查嗎? –

+1

我可能會更喜歡'if(!(key in obj)'''有條件 –

+0

@RyanSpeets'in'是不可靠的。相反'Object.prototype.hasOwnProperty()'在這裏最好。 – m0meni

-3

檢查,看看屬性存在

if(! obj[key]) { 
    obj[key] = value; 
} 
+0

這會覆蓋falsey鍵,如0,false,null – m0meni

+0

實際上,它不能正常工作。 –

3

您可以使用in來檢查對象中是否存在密鑰。

if (!(key in obj)) 
    obj[key] = 'somevalue' 
+2

爲什麼downvote?這實際上是最好的回答:) –

0

如果您可以幫助您與這個奇特庫,你可以使用從lodash分配:

var obj = {"1": "somevalue", "2": "someothervalue"}; 
var obj2 = {"3": "somevalue"}; 

_.assign(obj, obj2); // Was called _.extend in older versions 
相關問題