比较两个列表以排序第二个列表

时间:2019-05-28 11:32:48

标签: javascript

我想比较两个列表,如果第一个列表的值与第二个列表的代码相对应,则有必要根据比较的值对第二个列表进行排序

第一个列表:

      var List1 = [{id : "idValue2"}, {id : "idValue5"}]

第二个列表(排序之前)

     var List2 = [
                  {code : "idValue1", label: "value1"}, 
                  {code : "idValue2", label: "value2"},
                  {code : "idValue3", label: "value3"},
                  {code : "idValue4", label: "value4"};
                  {code : "idValue5", label: "value5"}]

比较list1 id和list2代码后,将对list2进行排序

第二个列表(排序后)

     var List2 = [
                  {code : "idValue2", label: "value2"},
                  {code : "idValue5", label: "value5"}
                  {code : "idValue1", label: "value1"}, 
                  {code : "idValue3", label: "value3"},
                  {code : "idValue4", label: "value4"}]

idValue2 idValue5 位居第一。

您有解决方案吗?

3 个答案:

答案 0 :(得分:2)

尝试这样。只需filtersome即可为您提供所需的数组,最后并置两个数组

var List1 = [{id : "idValue2"}, {id : "idValue5"}]

var List2 = [
   {code : "idValue1", label: "value1"}, 
   {code : "idValue2", label: "value2"},
   {code : "idValue3", label: "value3"},
   {code : "idValue4", label: "value4"},
   {code : "idValue5", label: "value5"}
]

var a = List2.filter(x=> ( List1.some(y=> { return y.id == x.code }) ));

var b = List2.filter(x=> ( !List1.some(y=> { return y.id == x.code }) ))


var list3 = a.concat(b);

console.log(list3);

答案 1 :(得分:1)

这是一个简单但可能并非真正有效的解决方案。基本上,您有两个嵌套的release循环,它们循环遍历List1和List2。如果id和代码相似,则将List2的元素压入结果数组,并从List2的副本中删除此元素。为什么要复制?因此,在迭代List2时,我们不会对其进行修改。 最后,结果(排序项)和copyList2(其余未排序项)通过for连接在一起。

concat

答案 2 :(得分:0)

您可以将ID作为值存储在临时数组中。然后在list2-array上使用自定义排序功能来比较代码在temp-array中的位置:

let list1 = [{id : "idValue2"}, {id : "idValue5"}];
let list2 = [
  {code : "idValue1", label: "value1"}, 
  {code : "idValue2", label: "value2"},
  {code : "idValue3", label: "value3"},
  {code : "idValue4", label: "value4"},
  {code : "idValue5", label: "value5"}
];

let tempArray = [];
for (let obj of list1) {
  tempArray.push(obj.id);
}

list2.sort(function(a, b) {
  let iA = tempArray.indexOf(a.code);
  let iB = tempArray.indexOf(b.code);
  if (iA == iB) {
      return 0;
  }
  if (iA == -1) {
    return 1;
  }
  if (iB == -1) {
    return -1;
  }
  if (iA < iB) {
    return -1;
  }
  if (iA > iB) {
    return 1;
  }
});


console.log(list2);