【发布时间】:2011-05-15 23:30:45
【问题描述】:
我想知道是否有人可以帮助我解决我的差异功能。它应该找到2个输入之间的差异。该函数接受 2 个数组,因此如果数组 1 有..“word1”、“word2”并且数组 2 有“word1”、“word2”和“word3”,它应该只返回“word3”。它在大多数情况下都可以工作,但是使用下面的某些输入,它就不起作用了。
function diff(a1, a2) {
if (a1.length > a2.length
|| a1.length == a2.length) {
return [""];
}
a1 = a1.slice(0);
a2 = a2.slice(0);
for (i = 0; i < a1.length; i++) {
for (k = 0; k < a2.length; k++) {
if (a1[i] == a2[k]) {
a1.splice(i, 1);
a2.splice(k, 1);
}
}
}
for (j = 0; j < a2.length; j++) {
for (p = 0; p < a1.length; p++) {
if (a2[j] == a1[p]) {
a2.splice(p, 1);
a1.splice(j, 1);
}
}
}
a1 = a1.concat(a2);
return a1;
}
var s1 = ["one", "two", "three", "four",];
var s2 = ["one", "two", "three", "four", "five"];
document.write(diff(s1, s2));
答案应该只返回“五”,但它返回“四”、“四”、“五”。帮助将不胜感激。我超级卡住了。非常感谢!
【问题讨论】:
-
你能详细说明你的算法应该做什么吗?你的两个例子涵盖的范围很小。
-
您通过在循环变量之前省略 var 在您的 diff 函数中创建大量全局变量,希望您不要在生产代码中这样做。
标签: javascript arrays string diff