2017-06-24 6 views
0

これを実装します: "キー名がデフォルトで使用可能かどうかを確認します(使用可能であれば、同じオブジェクトにもう1つのキーを追加します)。 ":91)"の下にある。私は次のコードを試しました。JAVASCRIPTを使用してJSON内の配列オブジェクトに名前値のペアを追加

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すべての有益な回答を投票し、*に答えをマークすることを忘れないでください。 –

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

これは私に「Uncaught TypeError:未定義の 'default'プロパティを読み取れません」 – SylieC

+0

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

+0

@SylieCはあなたのアプローチと同期しようとしました – gauravmuk

関連する問題