2012-05-18 36 views
1

我在JavaScript中有多個數組,其元素數量相同。我想一起找到共同的值,並將它們組成像以下的(使用JavaScript和jQuery)單獨的陣列...從多個數組中分組常見值

[1,2,3,4] 
[1,2,3,5] 
[1,2,3,6] 
[1,2,4,3] 

我想以下結果:

1/2/3/4的5,6
1/2/4/3

這應該會產生兩組獨立的組合。下面將不正確的:

1/2/3,4/3,4,5,6

因爲沒有的[1,2,4,5]和[1,2,4陣列, 6]存在。

這裏是我的代碼

<input type="checkbox" class="cb4" value="1,2,3,4" /> 
<input type="checkbox" class="cb4" value="1,2,3,5" /> 
<input type="checkbox" class="cb4" value="1,2,3,6" /> 
<input type="checkbox" class="cb4" value="1,2,4,3" /> 

for (i = 0; i < 4; i++) { 
    combos[i] = []; 
} 
$('input.cb4:checked').each(function(){ 
    var nums = this.value.split(','); 
    for (i = 0; i < nums.length; i++) { 
     if ($.inArray(nums[i], combos[i]) == -1) { 
      combos[i].push(nums[i]); 
     } 
    } 
}); 

var bets = ''; 
for (i = 0; i < combos.length; i++) { 
    combos[i].sort(function(a,b) {return a-b}); 
    bets += combos[i] + '/'; 
} 

串投注具有的價值: 「1/2/3,4/3,4,5,6」。再次,這是不正確的,因爲沒有1,2,4,5或1,2,4,6的值。

+1

你想在結果數組?或在字符串? – jfriend00

+0

你認爲最佳結果是什麼?最緊縮的版本?例如,如果[1,2,3,4]; [1,2,3,5]; [1,2,3,6]; [1,2,4,4]; [1 ,2,4,5]爲1/2/3/4,5,6; 1/2/4/4,5或1/2/3,4/4,5; 1/2/3/6'?你能否提供關於陣列性質的更多提示以及可能會消除更多複雜場景的可能結果?例如,我們在談論少數幾個數組還是1000個數組?是否只有一個「正確」的答案或任何組合會做?你能解釋一下這個背後的目的,也許有一個更簡單的方法嗎? – mellamokb

+0

結果可以是數組或字符串。是的,最佳結果是儘可能多地組合所有陣列。我們正在談論少於100個陣列。 –

回答

0

我建議您將輸入數組排序爲一對多樹結構,即{1,[{2,[{3,[4,5,6]},{4,[3]} ]}

無論您選擇「按原樣」使用此結構還是將其轉換爲字符串,它都會保留您想要的信息。

使用基本的原型,如:

oneToMany = function(a, b) { 
    branch = a; 
    leaves = new Array(); 
    for each x in b { 
    leaves.push(x).; 
    } 
} 

,直到你有結構我描述的那麼窩。

我很抱歉語法錯誤,因爲我從一個可憐的智能手機回答這個問題。如果您對此留言,我會以更好的示例來填補您的意見。無論如何,我希望你明白我的觀點。