将json对象转换为数组,以使用Javascript在ng repeat中迭代?
这是我的json示例,我从firebase获得json obj,我必须将列表转换为数组,以通过html绑定 我的Json对象是 这就是我所要求的 这是我需要的数组结构,当我添加新列表时,它必须唯一地存储在cricket类别中将json对象转换为数组,以使用Javascript在ng repeat中迭代?,javascript,angularjs,arrays,json,Javascript,Angularjs,Arrays,Json,这是我的json示例,我从firebase获得json obj,我必须将列表转换为数组,以通过html绑定 我的Json对象是 这就是我所要求的 这是我需要的数组结构,当我添加新列表时,它必须唯一地存储在cricket类别中 [ { "Name": "cricket", "imgUrl": "some url", "list1": [ { "Name": "bat", "imgUrl": "some url",
[
{
"Name": "cricket",
"imgUrl": "some url",
"list1": [
{
"Name": "bat",
"imgUrl": "some url",
"price": "$100"
},
{
"displayName": "pads",
"imgUrl": "some url",
"price": "$50"
}
]
},
{
"Name": "football",
"imgUrl": "some url"
}
]
我对任何人都是新手,请帮助我解决这个问题使用
对象.键
并将它们传递到数组.prototype.map
以创建您想要的数组-请参阅下面的演示:
var object={cats1:{Name:“cricket”,imgUrl:“some url”,list1:{bat:{Name:“bat”,imgUrl:“some url”,price:“$100”},pads:{displayName:“pads”,imgUrl:“some url”,price:$50”},cats2:{Name:“football”,imgUrl:“some url”};
var result=Object.keys(Object.map)(e=>Object[e]);
控制台日志(结果)代码>
.as console wrapper{top:0;max height:100%!important;}
您可以通过迭代输入对象键并剥离键来执行类似操作
var-app=angular.module(“sampleApp”,[]);
app.controller(“sampleController”,[“$scope”,
职能($范围){
$scope.result={
“cats1”:{
“名字”:“蟋蟀”,
“imgUrl”:“某个url”,
“清单1”:{
“蝙蝠”:{
“名称”:“蝙蝠”,
“imgUrl”:“某个url”,
“价格”:“$100”
},
“pads”:{
“显示名称”:“pads”,
“imgUrl”:“某个url”,
“价格”:“$50”
}
}
},
“cats2”:{
“名称”:“足球”,
“imgUrl”:“某个url”
}
};
$scope.format=Object.keys($scope.result).map((key)=>$scope.result[key])
}
]);代码>
格式化
{{格式| json}
您可以递归,但请注意,这可能会导致大对象冻结,也可能导致超出最大调用堆栈
逻辑
- 在对象上循环并检查所有条目是否都是对象
- 如果是,那么一个简单的
Object.keys(obj.map)(x=>obj[x])
就可以了
- 如果不是,则必须复制单个值,如果是对象,则再次循环内部对象。一种简单的方法是在每个键上循环,如果type不是object,则只返回值
函数ObjectToArray(obj){
if(类型(对象)=“对象”){
var keys=Object.keys(obj);
var allObjects=keys.every(x=>typeof(obj[x])=='object');
if(allObjects){
返回keys.map(x=>ObjectToArray(obj[x]);
}否则{
var o={};
keys.forEach(x=>{
o[x]=ObjectToArray(obj[x])
});
返回o;
}
}否则{
返回obj;
}
}
var d={cats1:{Name:“cricket”,imgUrl:“some url”,list1:{bat:{Name:“bat”,imgUrl:“some url”,price:“$100”},pads:{displayName:“pads”,imgUrl:“some url”,price:“$50”},cats2:{Name:“football”,imgUrl:“some url”};
console.log(ObjectToArray(d))
Object.keys(data.map(x=>data[x])
@Rajesh Op不想要“bat”@Mahi他想要。他只是想让列表像数组一样well@Rajesh请看所需的输出,然后有人能解释我使用for loopsop不需要bat
aah。。忽视了。感谢您指出它outOp不想要bat
?我应该恢复upvote吗?很好:)…我如何检查属性是否有object?这将限制为仅向下1级。我宁愿建议使用递归。
[
{
"Name": "cricket",
"imgUrl": "some url",
"list1": [
{
"Name": "bat",
"imgUrl": "some url",
"price": "$100"
},
{
"displayName": "pads",
"imgUrl": "some url",
"price": "$50"
}
]
},
{
"Name": "football",
"imgUrl": "some url"
}
]