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

これにより、上記のように 2 つの別々の組み合わせのセットが得られるはずです。以下は正しくありません。

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 の値がないため、これは正しくありません。

4

1 に答える 1

0

入力配列を 1 対多のツリー構造、つまり {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).;
  }
}

次に、説明した構造になるまでこれをネストします。

貧しいスマートフォンからこれに答えているので、構文エラーをお詫びします。コメントを残していただければ、より良い例をご紹介します。とにかく、あなたが私の主張を理解してくれることを願っています。

于 2012-05-19T00:10:46.910 に答える