[英]JavaScript function not working as intended
我一直在處理一個問題,需要一些幫助!
我在下面創建了自己的每個函數:
var myArray = [1,2,3,4,5]; // this will be running through the collection parameter
var each = function (collection, callback) {
if (Array.isArray(collection)) {
for (i=0; i<collection.length; i++) {
callback(collection[i]);
};
} else {
for (var property in collection){
callback(collection[property]);
}
}
};
我還在下面創建了自己的過濾器功能:
var filter = function(collection, predicate) {
var newArray= [];
if (each(collection, predicate)) {
newArray.push(collection[property]);
};
return newArray;
};
var test = function (item) {
return item > 2;
}; // this will be running through the predicate parameter
filter(myArray, test);
我想做的是在不更改每個功能或測試功能且僅更改過濾器功能的情況下,利用過濾器功能中的每個功能。 要返回的最后一行代碼是myArray的每個元素,它們在謂詞參數下最終都是真的 - 在本例中是測試函數。 因此,結果應為[3,4,5]。 但是,我只是讓數組打印為空。 我知道錯誤在哪里-我相信它在這里:
if (each(collection, predicate))
這行代碼試圖使用的是每個函數,使用謂詞函數對集合中的每個項目進行迭代,如果該特定項目在謂詞下計算為true,則下一行將把該元素壓入newArray中。
希望這是有道理的!
您將要執行以下操作:
var filter = function(collection, predicate) {
var array = [];
each(collection, function(item) {
if(predicate(item))
array.push(item);
});
return array;
};
每個的第二個元素是回調
您的filter
函數需要將謂詞包裝在單獨的函數中,以便它可以構建其返回值:
var filter = function(collection, predicate) {
var newArray= [];
each(collection, function(element) {
if (predicate(element)) newArray.push(element);
});
return newArray;
};
現在, 您的回調傳遞給你的each()
函數使用傳入的測試功能檢查集合中的每個元素,但話,就可以使用該結果來確定元素是否應該被添加到結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.