如何将对象中的Javascript嵌套对象更改为索引数组?
我刚刚开始开发,所以需要一些对象方面的帮助。我试着做一个for循环,并将值推送到一个数组中。问题在于,它将所有键/值作为一个索引推送,而不是单独索引每个键/值。我正在使用一个键/值对象,如下所示:如何将对象中的Javascript嵌套对象更改为索引数组?,javascript,arrays,object,Javascript,Arrays,Object,我刚刚开始开发,所以需要一些对象方面的帮助。我试着做一个for循环,并将值推送到一个数组中。问题在于,它将所有键/值作为一个索引推送,而不是单独索引每个键/值。我正在使用一个键/值对象,如下所示: var obj = { "application": { "create": "false", "read": "true", "update": "true", "delete": "false" }, "connection": {
var obj = {
"application": {
"create": "false",
"read": "true",
"update": "true",
"delete": "false"
},
"connection": {
"create": "false",
"read": "true",
"update": "true",
"delete": "false"
}
}
我需要索引每个键(应用程序和连接)-这些键需要是值。例如,以下内容将检索:
obj[0] = application
obj[0].create = false
obj[1] = connection
感谢您的帮助。如果您希望将对象的每个属性推送到一个数组中,您可以像这样迭代对象内容:
for (var item in obj){
/* item will equal the first property of obj, in this case: 'application' */
array.push(item)
}
array = ["application", "connection"]
您可以对每个对象属性使用相同的技术,将其子对象索引到数组中。您可以添加一个额外的字段
key
来存储对象obj
的键。这将生成对象的数组
var obj={
“申请”:{
“创建”:“假”,
“读取”:“正确”,
“更新”:“正确”,
“删除”:“假”
},
“联系”:{
“创建”:“假”,
“读取”:“正确”,
“更新”:“正确”,
“删除”:“假”
}
}
变量键=对象键(obj)
var arr=[]
键。映射(功能(键,i){
arr[i]=obj[key]
arr[i].key=key
})
console.log(arr[0].key)
console.log(arr[0]。创建)
console.log(arr[1].key)
根据您预期的结果,看起来您希望将对象的第一级转换为数组单元格
这可以做到:
var arr = [], i=0;
for (var key in obj) {
arr[key] = obj[key] // For accessing via the property name for example e.g. application
arr[i] = obj[key] // For index access for example obj[0]
i++;
}
您还可以使用.map方法来执行此操作。您可以迭代键,并使用内部对象的子对象组合一个新数组
var obj={application:{create:“false”,read:“true”,update:“true”,delete:“false”},连接:{create:“false”,read:“true”,update:“true”,delete:“false”},
数组=对象.keys(obj).map(函数(k){
返回[k].concat(Object.keys(obj[k]).map(函数(kk){
返回obj[k][kk];
}));
});
console.log(数组)谢谢你,普拉内斯。我如何用一个对象实现这一点——它不必是数组。“我只是假设它必须是一个数组。”希瑟更新了答案。检查@希瑟太棒了!考虑投票的答案吧!谢谢,安德鲁。我试试这个。你能提供一个我如何添加孩子的方法吗?我使用Object.getOwnPropertyNames将键推入数组,但我也需要推入嵌套对象。不客气,我可以问一下,您想要的结果是什么吗?您在另一条评论中提到,您认为结果必须是一个数组。如果我们知道您想要的结果是什么,那么我们可以提供更精确的解决方案。我正在尝试用这些数据填充网格。表的标题是Model、create、read、update和delete。模型列需要填充应用程序和连接。需要为每个模型填充相应的创建、读取、更新和删除值。请添加所需的(有效)结果。为什么您认为需要此结果?你想用这个来解决哪个问题?我是从哪里来的?你为什么要创建一个数组而不是仅仅用数字键扩展obj
?你是对的,我忘记设置了,我更新了示例。谢谢尼娜。这个索引-但是,我仍然需要保留键(应用程序和连接)。控制台日志正在打印[0]对象。请在问题中添加所需的完整结果。在编写时,它不是有效的javascript。