Javascript 通过比较父数组填充父对象

Javascript 通过比较父数组填充父对象,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个对象数组,其中再次包含父对象的id: 例如:- 我想将这个JSON转换成以下格式,因为我将用parentObject代替parentId $scope.result=[ { "id": 1, "name": ABC, "type": a, "parentId": { "id": 2, "name": PQR, "type": b,

我有一个对象数组,其中再次包含父对象的id: 例如:-

我想将这个JSON转换成以下格式,因为我将用parentObject代替parentId

$scope.result=[
    {
        "id": 1,
        "name": ABC,
        "type": a,
        "parentId": {
            "id": 2,
            "name": PQR,
            "type": b,
            "parentId": 1
        }
    },
    {
        "id": 2,
        "name": PQR,
        "type": b,
        "parentId": {
            "id": 1,
            "name": ABC,
            "type": a
        }
    }
]

有人能帮我转换吗?

假设
parentId
将引用一个元素

angular.forEach($scope.result, function(result) {
   var obj = $scope.result.filter(function(ele) {
         return result.parentId === ele.id;
   })[0];
   result.parentId = obj;
});
因为您的标记不包含angularjs,所以我在这里使用
Array.prototype.forEach

$scope.result.forEach(function(result) {
   var obj = $scope.result.filter(function(ele) {
         return result.parentId === ele.id;
   })[0];
   result.parentId = obj;
});

将执行2个循环第一个循环用id的键填充哈希,第二个循环用实际对象替换父id:

$scope = {}
$scope.result=[
{
  "id": 1,
  "name": "ABC",
  "type": "PQR",
  "parentId": 2
},
{
  "id": 2,
  "name": "ABC",
  "type": "PQR",
  "parentId": 1
}]

parents = {}
for(i=0;i<$scope.result.length;i++){
  parents[$scope.result[i]["id"]] = jQuery.extend({}, $scope.result[i]); // Clone object
}

 for(i=0;i<$scope.result.length;i++){
  $scope.result[i]["parentId"] = parents[$scope.result[i]["parentId"]]
}

$scope.result
$scope={}
$scope.result=[
{
“id”:1,
“名称”:“ABC”,
“类型”:“PQR”,
“家长ID”:2
},
{
“id”:2,
“名称”:“ABC”,
“类型”:“PQR”,
“家长ID”:1
}]
父母={}

对于(i=0;我将在$scope.result中拥有最终数组,对吗?是的,它将在$scope.result中。我在上面的代码中做了一个更改。请测试最新的代码。我将parentId设置为UnfinedUsing
filter
以查找数组中的单个项将非常低效,它将需要为每个项在整个数组中迭代一次在阵列中!如果它使用的数据集增长到甚至相当大的大小,这将变得非常慢非常快。更好的方法是,如果针对ES6兼容的浏览器和/或使用ES6到ES5的transpiler。或者,当您找到您需要的id时,您可以始终使用带有
break
语句的普通旧
for
循环oking for.@UselessCode是的,我同意你的观点。现在最好使用for循环with break语句。。
$scope = {}
$scope.result=[
{
  "id": 1,
  "name": "ABC",
  "type": "PQR",
  "parentId": 2
},
{
  "id": 2,
  "name": "ABC",
  "type": "PQR",
  "parentId": 1
}]

parents = {}
for(i=0;i<$scope.result.length;i++){
  parents[$scope.result[i]["id"]] = jQuery.extend({}, $scope.result[i]); // Clone object
}

 for(i=0;i<$scope.result.length;i++){
  $scope.result[i]["parentId"] = parents[$scope.result[i]["parentId"]]
}

$scope.result