У меня есть некоторый код, который предназначен для выполнения следующего:Почему моя функция возвращает другой массив?
Даны два массива строк
a1
иa2
возвращает отсортированный массивr
в лексикографическом порядке строкa1
которые подстрока строкa2
,
Массивы написаны в «общем» обозначении.
Теперь я делаю тест, где array1 = ["arp", "live", "strong"]
и array2 = ["lively", "alive", "harp", "sharp", "armstrong"]
. Я думаю, что у меня это есть, но я не понимаю, почему функция возвращает массив ["arp", "strong"]
, когда в последнем цикле for я заменяю newArray.splice(l, l+1)
на newArray.splice(k, k+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 может многое помочь с дупликацией. –
[Не использовать 'для ... in' перечислений на массивах!] (Https://stackoverflow.com/q/500504/1048572) – Bergi
Не используйте' splice'. Это запутанно и подвержено ошибкам. –