学习如何将脂肪箭头,写一些聪明的阵列过滤。
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内联?
只是传递的,而不是在filter()
匿名函数中调用它的函数引用
const myPrimeArray = newArray.filter(isPrime);
无论被写入为箭头功能的或不最终的结果是它仍然只是一个函数对象
只需复制并粘贴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);
但是,这不是那么可读IMO - 我喜欢你的版本,命名功能对于那些不是非常琐碎的操作不错。
过滤函数接受箭头功能,或者如果你想胖箭头函数:
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);
只要将功能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);
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);
您可以使用免费的点表示法(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);