【发布时间】:2017-05-05 15:45:28
【问题描述】:
我有一些代码用于执行以下操作:
给定两个字符串数组
a1和a2返回一个排序数组rina1的字符串的字典顺序,它们是a2的字符串。
数组以“通用”表示法编写。
现在我正在测试array1 = ["arp", "live", "strong"] 和array2 = ["lively", "alive", "harp", "sharp", "armstrong"]。
我想我明白了,但我不明白为什么函数只返回数组["arp", "strong"],而在最后一个for循环中我用newArray.splice(k, k+1)替换newArray.splice(l, l+1)。
谁能告诉我这是为什么?
function inArray(array1, array2) {
var newArray = [];
var sortedArray = [];
for (var i in array2) {
for (var j in array1) {
if (array2[i].includes(array1[j])) {
newArray.push(array1[j]);
};
};
};
sortedArray = newArray.sort();
for (var k = 0; k < newArray.length; k++) {
for (var l = 0; l < newArray.length; l++) {
if (newArray[k] === newArray[l] && k != l) {
newArray.splice(l, l + 1)
}
}
}
return sortedArray;
};
console.log(inArray(["arp", "live", "strong"], ["lively", "alive", "harp", "sharp", "armstrong"]));
【问题讨论】:
-
你会用 ES6 吗?如果是这样,Sets 可以帮助解决复制问题。
-
不要使用
splice。它令人困惑且容易出错。 -
您是否应该返回
newArray而不是sortedArray?还是在最后一个 for 循环中使用sortedArray? -
因为当
k=0和l > 0时,它会删除0索引处的0+1元素。所以它将删除arp。
标签: javascript arrays for-loop splice