我走線上的JavaScript課程和我很好奇的任務之一:JavaScript的濾波器陣列
我們來抓設置有初始陣列(在破壞者函數的第一個參數),隨後是一個或更多的論據。我們必須從初始數組中刪除與這些參數具有相同值的所有元素。
這裏是我的解決方案,但它不工作:
function destroyer(arr) {
// Separating the array from the numbers, that are for filtering;
var filterArr = [];
for (var i = 1; i < arguments.length; i++) {
filterArr.push(arguments[i]);
}
// This is just to check if we got the right numbers
console.log(filterArr);
// Setting the parameters for the filter function
function filterIt(value) {
for (var j = 0; j < filterArr.length; j++) {
if (value === filterArr[j]) {
return false;
}
}
}
// Let's check what has been done
return arguments[0].filter(filterIt);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
我能夠找到一個解決方案,但它不使任何意義對我來說,這就是爲什麼我發佈這個問題;你能告訴我爲什麼下面的代碼工作:
function destroyer(arr) {
// Separating the array from the numbers, that are for filtering;
var filterArr = [];
for (var i = 1; i < arguments.length; i++) {
filterArr.push(arguments[i]);
}
// This is just to check if we got the right numbers
console.log(filterArr);
// Setting the parameters for the filter function
function filterIt(value) {
for (var j = 0; j < filterArr.length; j++) {
if (value === filterArr[j]) {
return false;
}
// This true boolean is what makes the code to run and I can't // understand why. I'll highly appreciate your explanations.
}
return true;
}
// Let's check what has been done
return arguments[0].filter(filterIt);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
謝謝你的頭了!
在'功能filter'需要返回一定的價值。如果它真的是真的(例如'true'),則該元素被保留,如果它是虛假的(例如'false'),則被刪除。你只會返回錯誤的「false」或者「undefined」(自動)。 – Xufox
如果要保留元素,傳遞給'filter'方法的函數必須返回'true'。如果它只返回「false」,它將刪除所有內容。 _不返回值被視爲返回'false'。 – vlaz