我是一个相对较新的JavaScript,所以饶了我。 解决Freecodecamp中需要在两个数组中找到唯一值的问题。我写了一小段代码。
适用于仅包含整数的数组。比较字符串数组时会出现问题。尾随元素被添加到最终输出数组,甚至不可见。它应该只为这段代码输出一个值。
像这样。
"[*] Total unique values found = 2"
"[*] Unique values = pink wool,"
这是代码。它是混淆的。
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的链接,其中字符串数组不起作用..
感谢您的帮助。
答案 0 :(得分:3)
只是连接和过滤双打
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);
&#13;
在旧的javascript中:
function diffArray(arr1, arr2) {
return arr1.concat(arr2).filter(function(x,i,arr) {
return arr.indexOf(x) === arr.lastIndexOf(x)
})
}
答案 1 :(得分:2)
答案 2 :(得分:2)
问题出在你的while循环迭代两个数组并比较元素之后:
if(arr2.length > 0) {
newArr.push(arr2);
} else {
newArr.push(arr1);
}
你需要将else更改为elseif(arr1.length&gt; 0),这样你就不会将空数组(arr1的左边)推到newArr上。
话虽如此,凯文特尔提供了一个更好的替代方案来替代你想要做的事情。