[英]I want to add to the Record Collection challenge from freeCodeCamp, but I'm stuck
[英]I'm stuck with this FreeCodeCamp algorithm
function destroyer(arr) {
// Remove all the values
var toFilter;
var toFrom;
for(var i=0;i<arguments.length;i++) {
if (typeof arguments[i]=="object") {
toFilter = arguments[i];
} else {
toFrom = arguments[i];
}
}
var result = toFilter.filter(function(value,index,array) {
if(value===toFrom) {
return true;
}
return result;
});
console.log(result);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return [1,1]
我試圖解決這個算法已經快一個多星期了。 在這個任務中,我們需要刪除初始數組中存在的參數值,他們提到通過使用參數和過濾方法來解決這個問題。 好吧,我知道過濾器和參數在 Javascript 中的作用,我使用過濾器方法解決了以前的算法,我閱讀了參數和它的使用,但以前從未使用過。 每次我使用這兩個做某事時,它都會給我一個空白數組。 請任何人都可以幫助我我們如何使用過濾器和參數來做到這一點?
只是我的想法,你可以按照你想要的方式修改它:
function isValid() {
return value != 2 && value != 3;
}
var arr = [1, 2, 3, 1, 2, 3];
arr.filter(isValid); //It should return [1,1];
您現在需要的是從arguments
對象中獲取 2 和 3 值並更改 isValid 函數。
您可以做的是構造要從數組中刪除的值的查找,然后通過返回查找中不存在的值來過濾原始數組:
function destroyer(arr) { var lookup = {}; // For each remaining argument, add it to the lookup. for (var i = 0; i < arguments.length; i++) { lookup[arguments[i]] = true; } // Filter the array and return a new array // with elements that don't exist in the lookup. return arr.filter(function(elem) { return typeof lookup[elem] === 'undefined'; }); } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); //it should return [1,1]
有幾個問題,我們一一列舉:
toFrom
,因此您不是打算獲取所有非對象(即 2 和 3),而是只獲取最后一個非對象(即 3)filter()
, return true
表示“將此元素保留在列表中” ,如果值等於toFrom = 3
則返回true
我沒有嘗試,但我猜你的代碼會輸出[3,3]
,所以如果你想輸出[1,1]
,請嘗試根據你的版本修改代碼:
function destroyer(arr) { // Remove all the values var toFilter; var toFrom = []; for(var i=0;i<arguments.length;i++) { if (typeof arguments[i]=="object") { toFilter = arguments[i]; } else { // maintain a list of ALL non-objects which to be filtered toFrom.push(arguments[i]); } } var result = toFilter.filter(function(value,index,array) { if(toFrom.indexOf(value) != -1) { // If element is in the toFrom list, DO NOT keep it return false; } return true; }); console.log(result); } destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return
或者你可以試試我的版本:)
function destroyer(arr) { // Remove all the values for(var i=0;i<arguments.length;i++) { arr = arr.filter( x => x !== arguments[i]); } console.log(arr); } destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.