我正在迭代数组,我需要按照另一对的顺序排序。
说我有这两个数组:
aLinks = [4,5,6]
bLinks = [1,2,3,4,5,6]
我需要回复:
aLinks = [4,5,6]
bLinks = [4,5,6,1,2,3]
意味着我需要首先匹配第一个数组的项目而不是其余的项目, 如果可能,按订单排序。
我正在使用d3,所以我使用forEach来浏览链接集并保存aLinks的顺序。
我不知道如何将此订单应用于bLinks
var linkOrder = [];
linkSets.forEach(function(set, i) {
linkOrder = [];
set.aLinks.forEach(function(link,i){
linkOrder.push(link.path);
})
});
答案 0 :(得分:4)
你可以这样做:
代码 - 使用用户提供的修补程序:basilikum
var first = [4,5,6];
var second = [1,7,3,4,6,5,6];
var temp = [], i = 0, p = -1;
// numerical comparator
function compare(a, b) { return a - b; }
// take out matching items from second array into a temp array
for(i=0; i<first.length; i++) {
while ((p = second.indexOf(first[i])) !== -1) {
temp.push(first[i]);
second.splice(p, 1);
}
}
// sort both arrays
temp.sort(compare);
second.sort(compare);
// concat
temp = temp.concat(second);
console.log(temp);
答案 1 :(得分:2)
最终得到A + sort(A-B)
- 所以你只需要计算2个数组之间的差异。使用一些underscore便利方法,例如:
var A = [4,5,6];
var B = [1,2,3,4,5,6];
var diff = _.difference(A,B);
var result = _.flattern(A, diff.sort());
答案 2 :(得分:1)
迭代第一个数组,从第二个数组中删除值,然后将它们附加到数组的开头以获得正确的顺序:
var arr1 = [4,5,6];
var arr2 = [1,2,3,4,6,5];
arr1.sort(function(a,b) {return a-b;});
for (i=arr1.length; i--;) {
arr2.splice(arr2.indexOf(arr1[i]), 1);
arr2.unshift( arr1[i] );
}