数组的差异,结果为1或未定义"/>
数组的差异,结果为1或未定义
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
您能帮我解决吗?
回答如下:您的代码看起来不错。为了简单起见,可能需要进行一些修改。
function arrayDiff(a, b) {
return a.filter((aItem) => b.indexOf(aItem) === -1);
}
更多推荐
数组的差异,结果为1或未定义
发布评论