数组的差异,结果为1或未定义

问题描述 投票:0回答:2

Array a = [1,2,3,4,5,5]

Array b = [1,2,3,5]

c = a - b

应该返回c = [4](5重复两次,但我不希望它在输出中)现在这是我的代码:

function arrayDiff(a, b) {
  var array = [];
  var diff = [];
  for (var i = 0; i<a.length; i++) {
    array[a[i]] = true;
  }

  for (var i = 0; i<b.length; i++) {
    if (array[b[i]]) {
      delete array[b[i]];
    }
    else {
      array[b[i]] = true;
    }

    for (var k in array) {
      return diff.push(k);
    }

  }

}
Test.describe("Sample tests", function() {
  Test.it("Should pass Sample tests", function() {
    Test.assertDeepEquals(arrayDiff([], [4,5]), [], "a was [], b was [4,5]");
    Test.assertDeepEquals(arrayDiff([3,4], [3]), [4], "a was [3,4], b was [3]");
    Test.assertDeepEquals(arrayDiff([1,8,2], []), [1,8,2], "a was [1,8,2], b was []");
  });
}); 

但是它返回奇怪的东西。您能解释一下为什么它返回1以及如何解决吗?这是console.log输出:


a was [], b was [4,5] - Expected: [], instead got: 1
a was [3,4], b was [3] - Expected: [4], instead got: 1
a was [1,8,2], b was [] - Expected: [1, 8, 2], instead got: undefined


Unhandled rejection TestError: a was [], b was [4,5] - Expected: [], instead got: 1

您能帮我解决吗?

javascript arrays node.js difference
2个回答
0
投票

您的代码看起来不错。为了简单起见,可能需要进行一些修改。

function arrayDiff(a, b) {
  return a.filter((aItem) => b.indexOf(aItem) === -1);
}

0
投票

您可以取Set并过滤数组。

Set
© www.soinside.com 2019 - 2024. All rights reserved.