2013-05-26 75 views
1

我在遍历数组对,我需要按照其他顺序排序。由另一个索引数组对数组排序

说我有这两个数组:

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的顺序。

我不知道怎么这个命令适用于闪烁

var linkOrder = []; 

linkSets.forEach(function(set, i) { 
    linkOrder = []; 

    set.aLinks.forEach(function(link,i){ 
    linkOrder.push(link.path); 
    }) 
}); 
+5

发表一些代码。你试过什么了? – EnKrypt

+2

也发布一些关于你的说明。如果第一个数组中的项不在第二个数组内,或者如果第二个数组中的第一个项包含多个第一个项中的一个,会发生什么? – basilikum

+1

如果第一个数组是[6,5,4],那么第二个数组应该以[[4,5,6]](即排序)还是以[[6,5,4]]开始(匹配顺序在第一个数组中)。 –

回答

4

你可以不喜欢它:

  1. 取出来自第二阵列的匹配项目到一个临时数组
  2. 排序的临时数组
  3. 排序仅含有项所述第二阵列未
  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); 

工作演示http://jsfiddle.net/kHhFQ/

+0

谢谢!也解决了第一个数组中的项目在第二个数组中没有被排序的问题。 – BarakChamo

+1

如果需要:这里是techfoobar的小提琴的第二个数组处理多重事件的版本:http://jsfiddle.net/kHhFQ/1/ – basilikum

+0

@basilikum - 谢谢。这是一个干净的修复。将它添加到答案。 – techfoobar

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()); 
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]); 
} 

FIDDLE

相关问题