我的方法不是很干

时间:2016-03-14 13:56:02

标签: javascript

我正在编写一系列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
}

3 个答案:

答案 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 )