学习如何结合粗箭头来编写一些巧妙的数组过滤。
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直列?
答案 0 :(得分:2)
只需传递函数 reference ,而不是在filter()
const myPrimeArray = newArray.filter(isPrime);
无论是否被编写为箭头函数,最终结果仍然是一个函数对象
答案 1 :(得分:1)
只需复制和粘贴的主体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 - 我喜欢你的版本,命名功能对于那些不是非常琐碎的操作不错
答案 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);