我有一些代码可以执行以下操作:
给定两个字符串数组
a1
和a2
返回一个已排序的数组r
a1
的字符串的字典顺序,它们是...的子串 字符串a2
。
数组写在" general"符号
现在我正在array1 = ["arp", "live", "strong"]
和array2 = ["lively", "alive", "harp", "sharp", "armstrong"]
进行测试。
我想我已经知道了,但是我不明白为什么函数只在最后一个for循环中返回数组["arp", "strong"]
我用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"]));
&#13;
答案 0 :(得分:0)
原因是splice()
的第二个参数不是拼接的结束位置,而是应该删除的元素数。因此,在k = 1
时,您删除了2个元素,而不仅仅是索引1
中的元素。
newArray.splice(l, 1)
和newArray.splice(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(k, 1);
}
}
}
return sortedArray;
};
console.log(inArray(["arp", "live", "strong"], ["lively", "alive", "harp", "sharp", "armstrong"]));
答案 1 :(得分:0)
在评论中你已经得到了答案。始终可以使用ES2015 / ES6,并从中受益。
const words1 = ["arp", "live", "strong"];
const words2 = ["lively", "alive", "harp", "sharp", "armstrong"];
const final = [];
words1.forEach(v => {
words2.forEach(v2 => {
if (v2.includes(v)) {
final.push(v);
}
});
});
const finalSorted = [...new Set(final.sort())];
// just to add html
const pre = document.getElementById('result');
finalSorted.forEach(v => {
let content = pre.textContent;
content += `\n- ${v}`;
pre.textContent = content;
});
&#13;
<label>Result:</label>
<pre id="result"></pre>
&#13;
答案 2 :(得分:0)
看起来你有点过于复杂了;)
a1 = ["arp", "live", "strong", "bazooka"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
result = a1
.filter(x => a2.some(y => y.includes(x)))
.sort();
console.log(result);