【问题标题】:Adding a name value pair to an array object in JSON using JAVASCRIPT使用 JAVASCRIPT 将名称值对添加到 JSON 中的数组对象
【发布时间】:2017-06-24 18:03:17
【问题描述】:

我想实现这个: “检查键名默认值是否可用,如果可用,则在同一对象中再添加一个键。=>(“pin”:91)”在下面给出的 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);

【问题讨论】:

  • myObj["data"] 是一个数组,myObj["data"][key] 是一个对象。它永远不能等于字符串"default"。请改用if (myObj["data"][key].hasOwnProperty(k))
  • 为什么不将此作为答案而不是评论发布?
  • @Xufox 这给了我一个语法错误!! :( 说意外的数字。
  • @SylieC 不,不是。我的代码和你的代码都没有在任何地方包含数字文字。

标签: javascript json crud


【解决方案1】:

您需要做的就是遍历键名,如果不存在,则创建它。但是,请记住您的类型。 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);

【讨论】:

  • 这些是一些非常好的建议。将来肯定会关注他们。非常感谢,是的,这个 sn-p 有效。 :)
  • @SylieC 不要忘记对所有有用的答案进行投票,并将其中一个标记为 "the" 答案。
【解决方案2】:
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');

首先,我们得到数据键。由于它是一个数组,我们对其进行迭代。然后,我们检查默认键是否有定义的值,只有当它被定义为任何值时才添加键销。

【讨论】:

  • 这给了我“Uncaught TypeError: Cannot read property 'default' of undefined”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 2018-04-09
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多