2

2セットのアレイがあります。両方の配列にない文字を取得する必要があります。まず、インデックス0'a'が両方のアレイにあるかどうかを確認する必要があります。両方にある場合は、両方から「a」を削除する必要があります(最初の配列の最初の「a」だけで、最後の配列ではありません(インデックス3)。同じロジックを使用して2番目の項目「b」に移動します。

var arrayA = ['a'、'b'、'c'、'a'];

var arrayB = ['a'、'd'、'f'、'c'];

var arrayC = []; //結果が必要[b、a、d、f]

コードはhttp://jsfiddle.net/rexonms/AbFYh/#baseで設定されています

HTML

 <p class="arrayA">Array A</p>
 <p class="arrayB">Array B</p>
 <p class="arrayC">Array C</p>

jQuery

var arrayA = ['a','b','c','a'];
var arrayB = ['a','d','f','c'];
var arrayC = []; //Shoud have the result[b,a,d,f]

$('.arrayA').text('ArrayA: ' + arrayA);
$('.arrayB').text('ArrayB: ' + arrayB);

$.each(arrayA, function(indexA,valueA) {
$.each(arrayB, function(indexB, valueB){

    if(valueA != valueB)
    {
        arrayC.splice(valueA);            
    }
});

$('.arrayC').text('ArrayC: ' + arrayC);
});
4

5 に答える 5

4

これは文書化されていませんが、機能します。

<script type="text/javascript">
    var arr1=[1,2,3,4,5];
    var arr2=[3,4,5,7,8,9,6];
    $(document).ready(function(){
        var arr=$(arr1).not(arr2).get();
        alert(arr.length);
    });
</script>
于 2013-05-14T06:53:35.307 に答える
2

これがあなたが望むものの実用的なバージョンです:http: //jsfiddle.net/Zzt5f/

var arrayA = ['a','b','c','a'];
var arrayB = ['a','d','f','c'];
var arrayC = []; //Should have the result[b,a,d,f]

$('.arrayA').text('ArrayA: ' + arrayA);
$('.arrayB').text('ArrayB: ' + arrayB);

$.each(arrayA, function(indexA,valueA) {
    $.each(arrayB, function(indexB, valueB){
        if(valueA == valueB)
        {
            arrayA[indexA]=null;
            arrayB[indexB]=null;
            return false; //break out of inner each loop                     
        }
    });
});

$.each(arrayA.concat(arrayB),function(idx,val) {
    if(val!=null) arrayC.push(val);
});

$('.arrayC').text('ArrayC: ' + arrayC);
alert(arrayC);

ご覧のとおり、元のコードにいくつかの変更を加えただけです。まず、重複する値を削除しようとしているため、valueA==valueBその逆ではなく、かどうかを確認する必要があります。一致が見つかったら、2番目の配列の2番目の重複が削除されないように、2番目の反復を停止する必要がありreturn falseます。

array.spliceメソッドは使用しませんでした。これは、呼び出された配列から値を削除することで実際に新しい配列を作成して返すため、基本的には、使用している方法で何も実行していませんでした。ループ内に新しい配列を作成し続けない方がクリーンだと感じました。このメソッドは実際にはとを変更するarrayAためarrayB、後で再度必要になる場合は、クローンを作成する必要があることに注意してください。

</ p>

于 2012-07-07T15:00:13.347 に答える
1

バニラJavaScriptソリューション:

var sa = arrayA.join('');
var sb = arrayB.join('');
var sc = sa+sb;
for (var i=0; i<sc.length;i++) {
   var c = sc.charAt(i);
   if (sa.indexOf(c)==-1 || sb.indexOf(c)==-1) arrayC.push(c);
}

jQueryを使用すると、inArrayを使用することもできます。

var sc = arrayA.join('')+arrayB.join('');
for (var i=0; i<sc.length;i++) {
   var c = sc.charAt(i);
   if ($.inArray(c, arrayA)==-1 || $.inArray(c, arrayB)==-1) arrayC.push(c);
}

Randomが指摘したように、結果は["b"、 "a"、 "d"、 "f"]ではなく、両方のソリューションで["b"、 "d"、"f"]になります。

「ユニシティ」を「同じインデックスの他の配列に存在しない」と定義する場合は、次のようになります。

 for (var i=Math.min(arrayA.length, arrayB.length); i-->0;) {
   if (arrayA[i]!=arrayB[i]) {
      if ($.inArray(arrayA[i], arrayC)==-1) arrayC.push(arrayA[i]);
      if ($.inArray(arrayB[i], arrayC)==-1) arrayC.push(arrayB[i]);
   }
}   

編集:私はあなたの編集の新しい定義を読みました。これはユニシティとはまったく関係がないようです。何が欲しいのかわかりません。私はあきらめますが、最初の質問に答えて役立つかもしれないので、この答えを(少なくとも今のところは)残しました。

于 2012-07-07T13:18:33.747 に答える
1
var arrayA = ['a', 'b', 'c', 'a'];
var arrayB = ['a', 'd', 'f', 'c'];
var result = [];

function myArray( a, b ) {
   for( var i = 0; i < a.length; ++i ) {

        // find matched index of arrayB
        var bIndex = b.indexOf(a[i]);

        // if match found
        if( bIndex >= 0 ) {
            // remove element from arrayA
            a.splice( i, 1 );

            // remove element from arrayB of matched index
            b.splice( bIndex, 1 );
        }
    }

    // return result
    return a.concat(b);
}
result = myArray( arrayA, arrayB );

作業サンプル

于 2012-07-07T15:23:06.963 に答える
0

少し異なるデモを参照してください:http ://jsfiddle.net/c8YLf/ または http://jsfiddle.net/S6FXs/5/

コード

var a= ['a','b','c','a'];
var b= ['a','d','f','c'];

    var unique = $.grep(a, function(element) {
        return $.inArray(element, b) == -1;
    });

    var unique2 = $.grep(b, function(element) {
        return $.inArray(element, a) == -1;
    });
var result = unique + unique2;

alert(result); ​

または役立つかもしれません:JavaScript配列の違い

   var arrayA = ['a','b','c','a'];
var arrayB = ['a','d','f','c'];

function non_duplicate(arr1, arr2) {
      diff = [];
      joined = arr1.concat(arr2);
      for( i = 0; i <= joined.length; i++ ) {
        current = joined[i];
        if( joined.indexOf(current) == joined.lastIndexOf(current) ) {
          diff.push(current);
        }
      }
      return diff;
    }


var union = non_duplicate(arrayA,arrayB );
alert(union);
​
于 2012-07-07T13:33:22.577 に答える