そのため、arrayBにあるarrayAの番号を削除しようとしています。しかし、数値がそのarrayBで1回だけであり、そのarrayAで複数回である場合、関数でそれらの1つだけを削除する必要があります。
私の関数は機能するように見えますが、機能しません...
期待される出力は:1,3,3,4,5
let arrayA = [1,1,2,3,3,3,4,4,5]
let arrayB = [1,2,3,4]
function remove(arrayB,arrayA){
//newarray is the result array i want to get
let newarray = [];
//counter will controll if a number is more than one time in my arrayA
let counter = [];
arrayA.forEach(function(n){
//if a number of my arrayA is not in my arrayB
if(arrayB.indexOf(n) == -1){
newarray.push(n);
}
//if a number of my arrayB is only one time in my arrayA
else if(a.indexOf(n) == a.lastIndexOf(n)){
}
//if a number is more than one time but its the first one we meet
else if(a.indexOf(n) !== a.lastIndexOf(n) && counter.includes(n) == false){
//push it into the counter array so we'll know we already had this number
counter.push(n)
}
// if it's the second time we have to keep it and get it in the newarray
else {
newarray.push(n);
}
})
document.write(newarray)
}
単一のループで十分です。arrayBをループし、見つかった要素をarrayAから削除します。indexOf
常に最初のヒットで停止するため、かなり簡単になります。
let arrayA = [1,1,2,3,3,3,4,4,5];
let arrayB = [1,2,3,4];
arrayB.forEach(e => arrayA.splice(arrayA.indexOf(e), 1));
console.log(arrayA);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加