2017-01-01 76 views
1

我对JavaScript比较陌生,所以不用我了。 虽然解决了Freecodecamp中需要在两个数组中找到唯一值的问题之一。我写了一小段代码。java脚本中数组末尾的未知元素?

它仅含整数数组工作得很好。比较字符串数组时出现问题。尾部元素被添加到最终输出数组,它甚至不可见。它应该只为这段代码输出一个值。

就是这样。

"[*] Total unique values found = 2" 
"[*] Unique values = pink wool," 

这是code.Quite混淆它。

function diffArray(arr1, arr2) { 
    var newArr = []; 
    var length1 = arr1.length; 
    var length2 = arr2.length; 
    var test = true; 
    var tab = '  '; 
    console.log('[*] Starting ... '+tab); 

    while(arr1.length > 0 && arr2.length > 0) 
    { 
    console.log('[*] Entering while loop.'); 
reset: 
    for (var i=0; i<arr2.length; i++) 
    { 
     console.log('[*] Comparing '+arr1[0]+' and '+arr2[i]); 
     if(arr1[0] == arr2[i]) 
     { 
     console.log('[*] Matched ... ') 
     console.log(' $ Removig '+arr1[0]+' from arr1 and arr2'); 
     arr1.splice(0, 1); 
     arr2.splice(i, 1); 
     console.log(" $ arr1 length = "+arr1.length); 
     console.log(" $ arr2 length = "+arr2.length); 
     break reset; 
     } else if (i == arr2.length-1) 
     { 
     console.log(" $ No match found."); 
     console.log('[*] Pushing '+arr1[0]+' in newArr'); 
     newArr.push(arr1[0]); 
     arr1.splice(0, 1); 

     console.log('[*} newArr = '+newArr); 
     } else { 
     console.log('[*] Match failed.') 
     } 
    } 
    } 

    if(arr2.length > 0) { 
    newArr.push(arr2); 
    } else { 
    newArr.push(arr1); 
    } 
console.log('[*] Total unique values found = '+newArr.length); 
console.log('[*] Unique values = '+newArr); 
} 

diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]); 

以下是链接到JSBin与工作示例。

这里是一个链接JSBin与字符串数组这不是工作..

感谢您的帮助。

+1

寻求帮助时,请带缩进和可读性很强,始终格式化代码的时间。 –

+2

你并不需要使用JSBin的例子,使用[堆栈片段](http://meta.stackoverflow.com/questions/270944/feedback-requested-stack-snippets-2-0),使你的问题的可执行文件。 – Barmar

+0

@Barmar谢谢你的提示。我不知道这一点。 – Dimensionless

回答

2

的PROBL EM是后while循环遍历两个数组和比较的元素在:

if(arr2.length > 0) { 
    newArr.push(arr2); 
} else { 
    newArr.push(arr1); 
} 

您需要的其他更改为ELSEIF(arr1.length> 0),这样你不推空数组(这是什么arr1左边)到newArr上。

话虽这么说,凯文国际互联网提供你想要做什么更好的选择。

+0

非常感谢。这解决了它。 – Dimensionless

2

当您编写newArr.push(arr2);您将添加arr2作为newArr的新元素。

enter image description here

我想你想串联阵列。要做到这一点,你可以使用newArr.push.apply(newArr, arr2);

enter image description here

+0

下次我会记住这一点。 – Dimensionless

3

只是CONCAT和过滤双打

var diffArray = (arr1, arr2) => arr1.concat(arr2).filter((x,i,arr) => arr.indexOf(x) === arr.lastIndexOf(x)); 
 

 
var res = diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]); 
 

 
console.log(res);

而在旧的javascript:

function diffArray(arr1, arr2) { 
    return arr1.concat(arr2).filter(function(x,i,arr) { 
     return arr.indexOf(x) === arr.lastIndexOf(x) 
    }) 
} 
+0

非常感谢您从未发生的代码可以这样做。 – Dimensionless

+0

你能解释一下我的代码吗?就像​​这意味着什么=> – Dimensionless

+0

@ Dimensionlessless对不起。这是一个函数的箭头符号。我在我的回答结束时将它转化为了 –

相关问题