【问题标题】:Javascript assign Object inside Object dynamicallyJavascript动态分配对象内部的对象
【发布时间】:2017-07-18 19:51:00
【问题描述】:

这是我的对象示例,我需要在每个内部对象中循环并动态分配 {"type": "object"}。

输入:

var favoriteFruit = { “艾米”:{ "desc": "艾米的最爱", “水果”: { “名称”:“香蕉”, “红色” } }, “本”:{ "desc": "Ben 的最爱", “水果”: { “名称”:“苹果”, “红色” } }, “卡罗尔”:{ "desc": "Carol 的最爱", “水果”: { “名称”:“樱桃”, “红色” } }, “奥利维亚”:{ "desc": "奥利维亚最爱", “水果”: { “名称”:“橙色”, “颜色为橙色” } }, “普林”:{ "desc": "Pualine 最爱", “水果”: { “名称”:“梨”, “颜色”:“绿色” } } };

预期输出:

var favoriteFruit = {
    "Amy": {
       "type": "object", 
       "desc": "Amy's fav",
         "fruit": {
            "Name" : "Banana",
            "color" : "Red"
         }
    },
    "Ben": {
        "type": "object", 
        "desc": "Ben's fav",
         "fruit": {
            "Name" : "Apple",
            "color" : "Red"
         }
    },
    "Carol": {
        "type": "object",
        "desc": "Carol's fav", 
         "fruit": {
            "Name" : "Cherry",
            "color" : "Red"
         }
    },
    "Olivia": {
        "type": "object",
         "desc": "Olivia fav", 
         "fruit": {
            "Name" : "Orange",
            "color" : "Orange"
         }
    },
    "Pualine": {
        "type": "object", 
        "desc": "Pualine fav",
         "fruit": {
            "Name" : "Pear",
            "color" : "Green"
         }
    }
};

【问题讨论】:

标签: javascript json object


【解决方案1】:

您实际上没有 JSON 字符串,但我已经引用了它,所以它现在是。

查看 cmets 内联:

var favoriteFruit = `{
    "Amy": {
       "desc": "Amy's fav",
        "fruit": {
            "Name" : "Banana",
            "color" : "Red"
         }
    },
    "Ben": {
       "desc": "Ben's fav",
       "fruit": {
            "Name" : "Apple",
            "color" : "Red"
         }
    },
    "Carol": {
        "desc": "Carol's fav",
        "fruit": {
            "Name" : "Cherry",
            "color" : "Red"
         }
    },
    "Olivia": {
        "desc": "Olivia fav",
        "fruit": {
            "Name" : "Orange",
            "color" : "Orange"
         }
    },
    "Pualine": {
        "desc": "Pualine fav",
        "fruit": {
            "Name" : "Pear",
            "color" : "Green"
         }
    }
}`;

// Turn the JSON into an object
var obj = JSON.parse(favoriteFruit);

// Loop through the object's properties
for(var prop in obj){
   // Give each object a new property/value
   obj[prop].type = "Object";
}

console.log(obj);

【讨论】:

  • 是否可以在第一个位置使用“type”:“object”? "Pualine": { "type": "Object", "desc": "Pualine fav", "fruit": { "Name": "Pear", "color": "Green" } }
  • @user2553117 不,对象中的属性序列永远不会得到保证。而且,坦率地说,你没有理由需要它们。
【解决方案2】:

遍历键,使用Object.keys() 访问,然后使用Object.assign() 从那里开始:

var favoriteFruit = {
  "Amy": {
    "desc": "Amy's fav",
    "fruit": {
      "Name": "Banana",
      "color": "Red"
    }
  },
  "Ben": {
    "desc": "Ben's fav",
    "fruit": {
      "Name": "Apple",
      "color": "Red"
    }
  },
  "Carol": {
    "desc": "Carol's fav",
    "fruit": {
      "Name": "Cherry",
      "color": "Red"
    }
  },
  "Olivia": {
    "desc": "Olivia fav",
    "fruit": {
      "Name": "Orange",
      "color": "Orange"
    }
  },
  "Pualine": {
    "desc": "Pualine fav",
    "fruit": {
      "Name": "Pear",
      "color": "Green"
    }
  }
}

Object.keys(favoriteFruit).forEach(function (key) {
  Object.assign(favoriteFruit[key], { type: 'object' })
})

console.log(favoriteFruit)

如果您真的关心type 是字符串化时的第一个键(尽管规范中不能保证这一点,因为键最终是无序的),您可以改用它:

Object.keys(favoriteFruit).forEach(function (key) {
  favoriteFruit[key] = Object.assign({ type: 'object' }, favoriteFruit[key])
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 2011-08-06
    • 2012-05-04
    • 1970-01-01
    • 2018-11-29
    • 2015-10-15
    • 2011-09-19
    • 2014-12-21
    相关资源
    最近更新 更多