Javascript 正在尝试合并两个数组

Javascript 正在尝试合并两个数组,javascript,Javascript,下面是存储在中的json: $scope.regions = []; { "id": 100, "regions": [ { "id": 10, "name": "Abc", "rank": 0, }, { "id": 20, "name": "Pqr", "rank": 1, }, { "id": 30, "name": "Lmn", "

下面是存储在中的json:

$scope.regions = [];

{
  "id": 100,
  "regions": [
    {
      "id": 10,
      "name": "Abc",
      "rank": 0,
    },
    {
      "id": 20,
      "name": "Pqr",
      "rank": 1,
    },
    {
      "id": 30,
      "name": "Lmn",
      "rank": 2,
    },
    {
      "id": 40,
      "name": "xyz",
      "rank": 3,
    },
    {
      "id": 50,
      "name": "GGG",
      "rank": 4,
    },
    {
      "id": 60,
      "name": "YYY",
      "rank": 5,
    }
  ]
}
$scope.regionList = [];
var highestOrder = 3;

  "regions": [
    {
      "id": 40,
      "name": "xyz",
      "rank": 0,
    },
    {
      "id": 50,
      "name": "GGG",
      "rank": 1,
    },
    {
      "id": 60,
      "name": "YYY",
      "rank": 2,
    }
这是我的另一个json存储在:

$scope.regions = [];

{
  "id": 100,
  "regions": [
    {
      "id": 10,
      "name": "Abc",
      "rank": 0,
    },
    {
      "id": 20,
      "name": "Pqr",
      "rank": 1,
    },
    {
      "id": 30,
      "name": "Lmn",
      "rank": 2,
    },
    {
      "id": 40,
      "name": "xyz",
      "rank": 3,
    },
    {
      "id": 50,
      "name": "GGG",
      "rank": 4,
    },
    {
      "id": 60,
      "name": "YYY",
      "rank": 5,
    }
  ]
}
$scope.regionList = [];
var highestOrder = 3;

  "regions": [
    {
      "id": 40,
      "name": "xyz",
      "rank": 0,
    },
    {
      "id": 50,
      "name": "GGG",
      "rank": 1,
    },
    {
      "id": 60,
      "name": "YYY",
      "rank": 2,
    }
现在,我想将$scope.regionList合并到$scope.regionList中,但对于那些在$scope.regionList和$scope.regionList中都匹配的记录,我想将$scope.regionList的记录替换为$scope.regionList(仅两个列表中的公共记录)

$scope.regionList中的第一个不匹配记录将使用highestOrder开始排序,并将为每个不匹配记录不断递增,因此最终输出如下所示:

预期输出:

"regions": [
    {
      "id": 10,
      "name": "Abc",
      "rank": 3,
    },
    {
      "id": 20,
      "name": "Pqr",
      "rank": 4,
    },
    {
      "id": 30,
      "name": "Lmn",
      "rank": 5,
    },
    {
      "id": 40,
      "name": "xyz",
      "rank": 0,
    },
    {
      "id": 50,
      "name": "GGG",
      "rank": 1,
    },
    {
      "id": 60,
      "name": "YYY",
      "rank": 2,
    }
由于Abc是第一个不匹配的记录,因此它将有订单3,其余的将有订单号3,即4、5、6等

我的代码:

var highestOrder = 3;
 var found = false;

 for (var i = 0; i < $scope.regions.length; i++) {
   if ($scope.regions[i].id == 100) {
       found = true;
       for (var j = 0; j < $scope.regionList.length; j++) {
          for (var k = 0; k < $scope.regions[i].regions.length; k++) {
           if ($scope.regions[i].regions[k].id == $scope.regionList[j].id) {
                   $scope.regions[i].regions[k].rank = $scope.regionList[j].rank;
             } 
            else {
                   $scope.regions[i].regions[k].rank = highestOrder;
                    highestOrder = highestOrder + 1;
                 }
         }
     }
  }
  if (found)
       break;
}
var-highestOrder=3;
var=false;
对于(变量i=0;i<$scope.regions.length;i++){
如果($scope.regions[i].id==100){
发现=真;
对于(变量j=0;j<$scope.regionList.length;j++){
对于(var k=0;k<$scope.regions[i].regions.length;k++){
if($scope.regions[i].regions[k].id==$scope.regionList[j].id){
$scope.regions[i]。regions[k]。秩=$scope.regionList[j]。秩;
} 
否则{
$scope.regions[i].regions[k].rank=highestOrder;
highestOrder=highestOrder+1;
}
}
}
}
如果(找到)
打破
}
var区域={
“id”:100,
“区域”:[{
“id”:10,
“名称”:“Abc”,
“等级”:0,
},
{
“id”:20,
“名称”:“Pqr”,
“排名”:1,
},
{
“id”:30,
“名称”:“Lmn”,
“排名”:2,
},
{
“id”:40,
“名称”:“xyz”,
“排名”:3,
},
{
“id”:50,
“名称”:“GGG”,
“排名”:4,
},
{
“id”:60,
“名称”:“YYY”,
“排名”:5,
}
]
}
var highestOrder=3;
var=false;
变量区域列表=[{
“id”:40,
“名称”:“xyz”,
“等级”:0,
},
{
“id”:50,
“名称”:“GGG”,
“排名”:1,
},
{
“id”:60,
“名称”:“YYY”,
“排名”:2
}
]
对于(变量i=0;ilog(regions)
您可以使用哈希表并使用数组元素构建它以进行更新

然后迭代
区域
并使用散列的
高序
更新
。分配后递增
highestOrder

var$scope={regions:[{id:100,regions:[{id:10,姓名:“Abc”,排名:0,},{id:20,姓名:“Pqr”,排名:1,},{id:30,姓名:“Lmn”,排名:2,},{id:40,姓名:“xyz”,排名:3,},{id:50,姓名:“GGG”,排名:4,},{id:60,姓名:“YYY”,排名:5,},},
RegionUpdate=[{id:40,名称:“xyz”,排名:0,},{id:50,名称:“GGG”,排名:1,},{id:60,名称:“YYY”,排名:2,}],
regionsId=100,
highestOrder=3,
hash=Object.create(null);
regionsUpdate.forEach(函数(a){
散列[a.id]=a;
});
$scope.regions.some(函数(a){
如果(a.id==区域id){
a、 区域。forEach(函数(b){
b、 rank=hash[b.id]?hash[b.id]。rank:highestOrder++;
});
返回true;
}
});
console.log($scope)

.as控制台包装{最大高度:100%!重要;顶部:0;}
对您帮助我的努力表示感谢。我有多个Id=100和101的区域,所以如果我想为Id=100的区域设置此选项,那么?对于Id=101的
highestOrder
会发生什么情况?我会为Id=100101的每个区域设置区域列表,最高顺序一次只为一个区域。对吗现在,我想只考虑RealIn=100迭代数组,如果找到了正确的<代码> id ,返回返回的代码>真< /代码>。我认为,如果找到,则应用排名并退出循环。它是三元的
if(hash[b.id]){b.rank=hash[b.id].rank;}else{b.rank=highestOrder++;}