2016-03-14 1 views
0

Я работаю над серией JavaScript-дразнилок, чтобы улучшить свои общие знания о синтаксисе, я написал несколько методов фильтрации массивов до сих пор, и я замечаю, что мой код isn «ужасно СУХОЙ. Я не уверен, что это потому, что я привык к неявному возврату Ruby, а JS просто длиннее. Как я могу сократить их?Мои методы не очень DRY

var selectElementsStartingWithA = function(array) { 
    this.newArray = [] 
    array.forEach(function(n) { 
    if (n.charAt(0) === "a") { 
     this.newArray.push(n) 
    }; 
    }); 
    return this.newArray; 
} 

var selectElementsStartingWithVowel = function(array) { 
    this.newArray = [] 
    array.forEach(function(n) { 
    if (n[0].match(/^[aeiou]$/)) { 
     this.newArray.push(n); 
    }; 
    }); 
    return this.newArray 
} 

var removeNullElements = function(array) { 
    this.newArray = [] 
    array.filter(function(n) { 
    if (n != undefined) { 
     this.newArray.push(n) 
    }; 
    }); 
    return this.newArray 
} 
+10

Это вопрос больше подходит для http://codereview.stackexchange.com/ – millerbr

+0

Thanls @millerbr. Я не знал, что сайт существует. – evolutionxbox

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он запрашивает обзор кода, а не помогает диагностировать ошибку кодирования. – nbrooks

ответ

3

При использовании метода, как фильтр, вы должны использовать его как это:

var removeNullElements = function(array) { 
    return array.filter(function(n) { 
    return n != undefined; 
    }); 
} 

Или, может быть, даже лучше:

var removeNullElements = function(n) { 
    return n != undefined 
} 

var nonNullArray = array.filter(removeNullElements) 

Функция фильтрации предназначена для возвращения массива, и он просто сохранит все элементы, которые соответствуют выражению, которое вы возвращаете. Другие методы, которые вы можете захотеть заглянуть, это: .map и .reduce

Последний комментарий, я бы посоветовал использовать! == вместо! =, Но если вы хотите проверить значения фальшивки, вы также должны просто быть в состоянии, так как не определено будет falsy

return n 
+0

Или ES6 'array.flter (n => n! = Undefined)' :) – pawel

4

Ну, вы в основном изобретать метод filter. Например, в вашем первом методе просто перепишите его так. Нет необходимости создавать новую функцию.

var newArray = yourArray.filter(function(n){ 
    return n.charAt(0)==="a"; 
}); 
2

Вам не нужно изобретать велосипед:

var startingWithA = yourArray.filter((n) => n.charAt(0)==="a") 

var startingWithVowel = yourArray.filter((n) => n[0].match(/^[aeiou]$/)) 

var withoutNullElements = yourArray.filter((n) => n !== undefined) 
+1

FYI вы можете избавиться от 'return', обернув выражение в'() 'вместо' {} ', например. 'var startWithA = yourArray.filter (n => (n.charAt (0) ===" a "))' – pawel

+0

Хммм. Функции стрелки, не уверены, понравятся ли они мне. – evolutionxbox

+0

Почему? Я думаю, что функции стрелок делают код более читаемым. – emilioriosvz

Смежные вопросы