我编写了一个函数来计算数组realNumberArray中只有正整数的平方,并返回一个带有结果的新数组。
例如:[4,5.6,-9.8,3.14,42,6,8.34,-2]返回[16,1764,36]
如何仅使用reduce()重新创建以下函数?什么是首选方法?
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = (arr) => {
const squaredIntegers = arr;
let newArr=squaredIntegers.filter(val=>val%1==0 && val>0).map(val=>Math.pow(val,2))
return newArr;
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
只有在测试通过时才推送到累加器:
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = arr => arr.reduce((a, val) => {
if (val % 1 == 0 && val > 0) {
a.push(val ** 2);
}
return a;
}, []);
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
使用reduce
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = (arr) => {
const squaredIntegers = arr;
let newArr = squaredIntegers.reduce((acc, val) => {
if (val % 1 == 0 && val > 0) {
acc.push(Math.pow(val, 2));
return acc;
}
return acc
}, [])
return newArr;
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
最好的方法是检查该数字上的parseFloat()
和parseInt()
是否相同,以确定给定的数字是纯整数。然后,根据您的附加条件,其数量应大于0,在if
中添加额外条件。
var arr = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2] ;
var res = arr.reduce((acc, num) => {
if(num > 0 && parseFloat(num) === parseInt(num)){
acc.push(num*num);
}
return acc;
}, []);
console.log(res);
您可以连接平方值的空数组,具体取决于非整数值或负数。
const
realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2],
squareList = array => array.reduce((r, v) => r.concat(v % 1 || v < 0 ? [] : v * v), []),
squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
试试这个
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = (arr) => {
return arr.reduce((a,val)=>{
if(val%1==0 && val>0)
a.push(Math.pow(val,2))
return a;
},[])
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
您可以通过以下方式实现此目的:
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const result = realNumberArray.reduce((a, i) => Number.isInteger(i) && i > 0 ? a.concat([ i ** 2 ]) : a, [])
console.log(result)
为了解决这个问题,上面的代码将输入数组realNumberArray
减少到result
数组,其中每个reduce迭代:
Number.isInteger(number)
它是整数,则迭代的输入值被“过滤”。如果数字i
是整数,那么代码a
将该数字的“正方形”连接到输出数组a.concat([ i ** 2 ])
(注意number ** 2
是Math(number, 2)
的简写i
不是整数,则通过直接返回当前输出数组a
进行迭代来过滤掉希望有所帮助!
你可以用reduce这样做:
const squareList = arr =>
arr.reduce((out, x) => x % 1 === 0 && x > 0 ? [...out, x * x] : out, []);
console.log(squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]));
使用reduce和Array解构代替push方法
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const newArray = realNumberArray.reduce((acc, curr) => (curr % 1 === 0 && curr >= 0 ? [...acc, curr * curr] : acc), []);
console.log(newArray);