2017-07-18 123 views
-3

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

输入:

VAR favoriteFruit = { “艾米”:{ “说明”: “艾米的最爱”, “果”:{ “名称”: “香蕉”, “颜色”: “红” } }, “奔”:{ “说明”: “奔的最爱”, “果”:{ “名称”: “苹果”, “颜色”: “红色” } }, “Carol”:{ “desc” : “卡罗尔的最爱”, “果”:{ “名称”: “樱桃”, “颜色”: “红色” } }, “奥利维亚”:{ “说明”: “奥利维亚最爱”, “果”:{ “名称”: “橙色”, “颜色”: “橙色” } }, “Pualine”:{ “说明”: “Pualine最爱”, “果”:{ “Name”:“Pear”, “color”:“Green” } } };

预期输出:

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" 
     } 
    } 
}; 
+0

欢迎[堆栈溢出( https://stackoverflow.com/)!在这个网站,你应该尝试**自己编写代码**。在[做更多 研究](https://meta.stackoverflow.com/questions/261592)如果你有一个问题,你可以**发布你已经尝试过的**与清楚的解释什么不是工作**并提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。我建议阅读[如何提出一个好问题](https://stackoverflow.com/questions/how-to-ask)。另外,一定要参加[tour](https://stackoverflow.com/tour)。 –

+1

这不是JSON。这只是一个普通的JavaScript对象。 JSON是一个字符串。 –

回答

0

你实际上并没有一个JSON字符串,但我引用它,这样它现在是。

看评论在线:

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);

+0

是否有可能在第一个位置有“type”:“object”? “Pualine”:{ \t “类型”: “对象”, “说明”: “Pualine最爱”, “果”:{ “名称”: “梨”, “颜色”: “绿色” } } – user2553117

+0

@ user2553117不,不会保证对象中的属性序列不被保证。坦率地说,你没有理由会需要他们。 –

0

迭代通过按键,通过使用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]) 
})