我有两组数组。我需要得到不在两个数组中的字母。首先,它应检查索引0'a'是否在两个阵列上。如果两者都应该从两者中删除'a'(只是第一个数组中的第一个'a'而不是结尾的那个(索引3)。并使用相同的逻辑去第二个项'b'。
var arrayA = ['a','b','c','a'];
var arrayB = ['a','d','f','c'];
var arrayC = []; // Shoud有结果[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);
});
答案 0 :(得分: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>
答案 1 :(得分: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
,反之亦然。找到匹配后,第二次迭代需要暂停以防止删除第二个数组中的第二个副本,因此return false
。
我没有使用array.splice方法,因为这实际上是通过从调用它的数组中删除值来创建并返回一个新数组,所以基本上它没有像你使用它那样做任何事情。不继续在循环中创建新数组感觉更清晰。请注意,此方法实际上会修改arrayA
和arrayB
,因此如果您以后再次需要它们,则必须克隆它们。
答案 2 :(得分:1)
一个vanilla 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”]。
如果你想将“unicity”定义为“不存在于同一索引的另一个数组中”,这里是:
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]);
}
}
编辑:我已经阅读了编辑的新定义。这似乎与unicity无关。我不明白你想要什么。我放弃但是我留下了这个答案(至少目前为止),因为它回答了第一个问题并且可能有用。
答案 3 :(得分: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 );
<强> Working sample 强>
答案 4 :(得分: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 array difference
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);