Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将json对象转换为数组,以使用Javascript在ng repeat中迭代?_Javascript_Angularjs_Arrays_Json - Fatal编程技术网

将json对象转换为数组,以使用Javascript在ng repeat中迭代?

将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",

这是我的json示例,我从firebase获得json obj,我必须将列表转换为数组,以通过html绑定

我的Json对象是 这就是我所要求的 这是我需要的数组结构,当我添加新列表时,它必须唯一地存储在cricket类别中

[
  {
    "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"
  }
]