我正在编写一系列JavaScript文本来提高我对语法的一般了解,到目前为止我已经编写了一些数组过滤方法,并且我注意到我的代码并不是非常糟糕。我不确定是不是因为我习惯了Ruby的隐式返回,而JS只是更长。我怎样才能缩短这些?
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
}
答案 0 :(得分:4)
嗯,你基本上重新发明了filter方法。例如,在您的第一个方法中,只需将其重写为此即可。无需创建新功能。
var newArray = yourArray.filter(function(n){
return n.charAt(0)==="a";
});
答案 1 :(得分:3)
使用像filter这样的方法时,你应该像这样使用它:
var removeNullElements = function(array) {
return array.filter(function(n) {
return n != undefined;
});
}
或者甚至更好:
var removeNullElements = function(n) {
return n != undefined
}
var nonNullArray = array.filter(removeNullElements)
filter函数用于返回一个数组,它将保留与返回的表达式匹配的所有元素。您可能想要研究的其他方法是.map和.reduce
最后一条评论,我建议你使用!==而不是!=,但是如果你确实想要检查有价值的值,那么你也应该能够,因为未定义会是假的
return n
答案 2 :(得分: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 )