java脚本中数组末尾的未知元素?

时间:2017-01-01 15:53:47

标签: javascript arrays string

我是一个相对较新的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的链接,其中字符串数组不起作用..

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

只是连接和过滤双打

&#13;
&#13;
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;
&#13;
&#13;

在旧的javascript中:

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

答案 1 :(得分:2)

撰写newArr.push(arr2);时,您将arr2作为新元素添加到newArr

enter image description here

我想你想要连接数组。为此,您可以使用newArr.push.apply(newArr, arr2);

enter image description here

答案 2 :(得分:2)

问题出在你的while循环迭代两个数组并比较元素之后:

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

你需要将else更改为elseif(arr1.length&gt; 0),这样你就不会将空数组(arr1的左边)推到newArr上。

话虽如此,凯文特尔提供了一个更好的替代方案来替代你想要做的事情。