在javascript中根据id排列两个长度不等的数组

在javascript中根据id排列两个长度不等的数组,javascript,jquery,arrays,underscore.js,Javascript,Jquery,Arrays,Underscore.js,阵列1: [{Id:1,Name:'abc'},{Id:5,Name:'bcd'},{Id:3,Name:'xyz'}] [{Id:1,Name:'abc'},{Id:3,Name:'xyz'},{Id:5,Name:'bcd'}] 阵列2: [{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'] [{Id:1,Name:'Ajay1'},{Id

阵列1:

[{Id:1,Name:'abc'},{Id:5,Name:'bcd'},{Id:3,Name:'xyz'}]
[{Id:1,Name:'abc'},{Id:3,Name:'xyz'},{Id:5,Name:'bcd'}]
阵列2:

[{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4']
[{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}] 
重新排列两个阵列时,输出应如下所示:

阵列1:

[{Id:1,Name:'abc'},{Id:5,Name:'bcd'},{Id:3,Name:'xyz'}]
[{Id:1,Name:'abc'},{Id:3,Name:'xyz'},{Id:5,Name:'bcd'}]
阵列2:

[{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4']
[{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}] 


让我知道以上的最佳方式。两个阵列中的现有ID的顺序应该相同,其中一个阵列中的额外ID应该在最后一个。

我希望这就是您要查找的

var Arr1=[{Id:1,名称:'Ajay1'},{Id:5,名称:'Ajay5'},{Id:3,名称:'Ajay3'}]; var Arr2=[{Id:3,名称:'Ajay3'},{Id:5,名称:'Ajay5'},{Id:1,名称:'Ajay1'},{Id:2,名称:'Ajay2'},{Id:4,名称:'Ajay4'}]; var finalArr=[]; var unmatchdarr=[]; Arr2.forEachfunctionitem{ var inArr=Arr1.filterfunctiona1{ 返回a1.Id==item.Id; }; 长度{ 最后一项; } 否则{ 不匹配的项目; } }; var finalArr=finalArr.concatunmatcher; snippet.logJSON.stringifyfinalArr; 可以使用下划线对第一个数组进行排序

然后合并并找到剩下的。最后,您可以通过使用本机方法组合两个数组来创建第二个数组,如下所示:

var arr1=[{Id:1,名称:'abc'},{Id:5,名称:'bcd'},{Id:3,名称:'xyz'}], arr2=[{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}], newArr1=uu.sortByarr1,Id, 差异=uu0.filterarr2,functionobj{ 返回u0.everyar1,函数{ 返回elm.Id!=obj.Id; }; }, newArr2=newArr1.concatdiff; 控制台。lognewArr1,newArr2; snippet.logJSON.stringifynewArr1; snippet.logJSON.stringifynewArr2;
您希望根据什么对第二个数组进行排序?它似乎没有遵循任何顺序。@Saravana仅基于现有ID。好的。你被困在哪里了?你在哪一部分有问题?现在,这读起来就像请为我做我的工作。最好的选择是先创建JSFIDLE!!!我不知道为什么这个问题被搁置了?!很明显,问题的所有者希望对数据进行排序!我可以建议一些而不是过滤器,没有理由创建一个结果数组只是为了使用它的长度。这也没有将前三个条目按正确的顺序排列。非常感谢你为他们做OP的工作。伙计们,这两个数组都需要根据现有ID重新排列。上述解决方案不正确。@zooney:再说一遍:你卡在哪一部分?@T.J.Crowder:两个数组中的现有ID应该是相同的顺序。@T J:请查看我编辑的问题。您的解决方案适用于具有相同项的数组,但在我的情况下,对象可以具有不同的值。@zooney该解决方案仍适用于您编辑的数组,只要它们应根据Id属性进行排序。对象可以有任意数量的具有不同值的其他属性…@T J:不,它不适用于具有不同值的对象。它将newArray1连接到diff@zooney,我用新更新的阵列更新了第一个演示,效果很好。请注意,第二个数组中缺少一个}。@T J:Output应该是-Array1[abcid:1,xyzid:3,bcdid:5]和Array2[Ajay1id:1,Ajay3id:3,Ajay3id:5,Ajay2id:2,Ajay4id:4]。具有公共id的项顺序相同,第二个数组中的新项可以遵循任何顺序。