用粗箭头对素数进行数组过滤

时间:2019-02-02 18:25:00

标签: javascript reactjs

学习如何结合粗箭头来编写一些巧妙的数组过滤。

const newArray = [1, 3, 2, 5, 10];
const isPrime = num => {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1;
};


const myPrimeArray = newArray.filter(element => isPrime(element));
console.log(myPrimeArray);

是否有一种方法可以并入功能isPrime入脂肪箭头.filter直列?

6 个答案:

答案 0 :(得分:2)

只需传递函数 reference ,而不是在filter()

中的匿名函数中调用它
const myPrimeArray = newArray.filter(isPrime);

无论是否被编写为箭头函数,最终结果仍然是一个函数对象

答案 1 :(得分:1)

只需复制和粘贴的主体isPrimefilter回调:

const newArray = [1, 3, 2, 5, 10];
const myPrimeArray = newArray.filter(num => {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1;
});
console.log(myPrimeArray);

但是,这不是那么可读IMO - 我喜欢你的版本,命名功能对于那些不是非常琐碎的操作不错

答案 2 :(得分:1)

过滤器功能接受箭头功能,如果需要,可以使用粗箭头功能:

const myPrimeArray = newArray.filter(isPrime);

工作示例:

const newArray = [1, 3, 2, 5, 10];
const isPrime = num => {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1;
};


const myPrimeArray = newArray.filter(isPrime);
console.log(myPrimeArray);

答案 3 :(得分:0)

只需在isPrime的回调中移动函数filter

const newArray = [1, 3, 2, 5, 10];


const myPrimeArray = newArray.filter(num => {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1;
});
console.log(myPrimeArray);

答案 4 :(得分:0)

const newArray = [1, 3, 2, 5, 10];
const myPrimeArray = newArray.filter(element => {
    for (let i = 2; i < element; i++) {
        if (element % i === 0) return false;
    }
    return element !== 1;
});
console.log(myPrimeArray);

答案 5 :(得分:0)

您可以使用在函数式编程中经常使用的无点符号wikipedia),并省略该参数。不用给箭头函数带参数并用单个参数调用isPrime函数,只需传递isPrime函数:

arg => isPrime(arg)等效于isPrime,因此您可以这样做:

const myPrimeArray = newArray.filter(isPrime);

或者你也可以定义箭头功能需要用到它,作为参数传递给你的过滤器的呼叫。然而,这种代码是的少可读和可重复使用不是作为你没有限定isPrime功能。

const newArray = [1, 3, 2, 5, 10];

const myPrimeArray = newArray.filter(num => {
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1 && num !== 0;
});

console.log(myPrimeArray);

  

警告:isPrime(0)应该返回false,并为此添加一个条件。

如果只循环直到数字的平方根,也可以将算法的复杂度从O(n)降低到O(sqrt(n)),并更快地得到结果:

const newArray = [1, 3, 2, 5, 10];

const myPrimeArray = newArray.filter(num => {
  for (let i = 2, s = Math.sqrt(num); i <= s; i++) {
    if (num % i === 0) return false;
  }
  return num !== 1 && num !== 0;
});

console.log(myPrimeArray);