2017-06-24 56 views
0

我想實現: 「檢查密鑰名稱默認是否可用,如果可用,則在同一對象中添加一個以上的鍵。 「:91)」在下面給出的json上。我已經嘗試了下面的代碼。在JSON中使用JAVASCRIPT添加名稱值對

var myObj = { 
    "data": [{ 
     "code": "EN", 
     "language": "English", 
     "content_available": true, 
     "isdefault": true 
    }, { 
     "code": "AR", 
     "language": "Arabic", 
     "content_available": true, 
     "isdefault": false, 
       "default" : true 

    }, { 
     "code": "BR", 
     "language": "Brazilian Portuguese", 
     "content_available": true, 
     "isdefault": false 
    }, { 
     "code": "CN", 
     "language": "Simplified Chinese", 
     "content_available": true, 
     "isdefault": false, 
       "default" : true 
    }, { 
     "code": "TW", 
     "language": "Traditional Chinese", 
     "content_available": true, 
     "isdefault": false 
    }, { 
     "code": "DE", 
     "language": "German", 
     "content_available": true, 
     "isdefault": false 
    }, { 
     "code": "ES", 
     "language": "Spanish", 
     "content_available": true, 
     "isdefault": false 
    }, { 
     "code": "FR", 
     "language": "French", 
     "content_available": true, 
     "isdefault": false 
    }, { 
     "code": "JP", 
     "language": "Japanese", 
     "content_available": true, 
     "isdefault": false, 
       "default" : true 
    }, { 
     "code": "RU", 
     "language": "Russian", 
     "content_available": false, 
     "isdefault": false 
    }], 
    "success": true 
} 
function addKey(k) { 
    for (var key in myObj.data) { 
    if (myObj["data"][key] === k) { 
     myObj["data"][key]["pin"] = "91"; 
    } 
    } 
} 
addKey("default"); 
console.log(myObj); 
+0

'MyObj中[ 「數據」]'是一個數組,'MyObj中[ 「數據」] [鍵]'是一個對象。它永遠不能等於字符串「default」。嘗試'if(myObj [「data」] [key] .hasOwnProperty(k))''。 – Xufox

+0

爲什麼不把它作爲答案而不是評論? – Graham

+0

@Xufox這是給我一個語法錯誤! :(說意想不到的數字 – SylieC

回答

0

所有你需要做的是循環鍵名,如果不存在,創建它。但是,記住你的類型。 for/in用於迭代對象,而不是數組,forEach()是數組的首選。

var myObj = { 
 
    "data": [{ 
 
     "code": "EN", 
 
     "language": "English", 
 
     "content_available": true, 
 
     "isdefault": true 
 
    }, { 
 
     "code": "AR", 
 
     "language": "Arabic", 
 
     "content_available": true, 
 
     "isdefault": false, 
 
       "default" : true 
 

 
    }, { 
 
     "code": "BR", 
 
     "language": "Brazilian Portuguese", 
 
     "content_available": true, 
 
     "isdefault": false 
 
    }, { 
 
     "code": "CN", 
 
     "language": "Simplified Chinese", 
 
     "content_available": true, 
 
     "isdefault": false, 
 
       "default" : true 
 
    }, { 
 
     "code": "TW", 
 
     "language": "Traditional Chinese", 
 
     "content_available": true, 
 
     "isdefault": false 
 
    }, { 
 
     "code": "DE", 
 
     "language": "German", 
 
     "content_available": true, 
 
     "isdefault": false 
 
    }, { 
 
     "code": "ES", 
 
     "language": "Spanish", 
 
     "content_available": true, 
 
     "isdefault": false 
 
    }, { 
 
     "code": "FR", 
 
     "language": "French", 
 
     "content_available": true, 
 
     "isdefault": false 
 
    }, { 
 
     "code": "JP", 
 
     "language": "Japanese", 
 
     "content_available": true, 
 
     "isdefault": false, 
 
       "default" : true 
 
    }, { 
 
     "code": "RU", 
 
     "language": "Russian", 
 
     "content_available": false, 
 
     "isdefault": false 
 
    }], 
 
    "success": true 
 
} 
 

 
    
 
function addKey(k) { 
 

 
    // myObj.data is an array. for/in loops should not be used on arrays 
 
    // But forEach() is preferred on arrays 
 
    myObj.data.forEach(function(obj){ 
 
    
 
    // Each array element is an object. We need to loop that object. 
 
    // for/in loops are for objects 
 
    for(var prop in obj){ 
 
     // Is the current property (key) name the same as the provided argument ("default") 
 
     if(prop === k){ 
 
     // Add new key/value to the object 
 
     obj["pin"] = "91"; 
 
     } 
 
    } 
 
    }); 
 
} 
 
addKey("default"); 
 
console.log(myObj);

+0

這些都是一些非常好的建議。肯定會在未來跟着他們..非常感謝,是的這個片段的作品。:) – SylieC

+0

@SylieC不要忘記投票所有有用的答案,並將其中一個標記爲*「the」*答案。 –

0
function checkForKey(obj, key) { 
    for (var i = 0; i < obj.data.length; i++) { 
     if (obj.hasOwnProperty(obj.data[i]) && obj.data[i][key] !== undefined) { 
      obj.data[i].pin = 91; 
     } 
    } 
} 

checkForKey(myObj, 'default'); 

首先,我們得到的數據項。由於它是一個數組我們遍歷它。然後,我們檢查默認鍵是否具有定義的值,並且只有在用任何值定義時才添加鍵引腳。

+0

這給了我「未捕獲的類型錯誤:無法讀取未定義的屬性'默認值' – SylieC

+0

https:// codepen.io/anon/pen/ZyXEEv – gauravmuk

+0

@SylieC嘗試與您的方法同步 – gauravmuk

相關問題