我想知道这是否是一个纯 JavaScript 函数。如果不是,我想了解原因。function reverseArrayInPlace(array1) { let array2 = []; for (let i = array1.length - 1; i >= 0; i--) { array2.push(array1[i]); } return array2;}谢谢您的帮助!
1 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
由于纯函数必须在给定相同输入的情况下产生相同的输出,并且没有副作用,因此您的代码是纯的(假设参数将array1是一个普通数组,而不是像length属性上带有 setter 的对象之类的奇怪的东西)。
也就是说,纯度通常是函数式上下文中需要关注的一个问题,并且这不是函数式方法,因为您使用的是.push,它会改变您创建的数组。一种更实用的方法是.map创建要一次性返回的数组,而无需进行更改:
const reverseArray = (arr) => {
const { length } = arr;
return arr.map((_, i) => arr[length - 1]);
};
或Array.from:
const reverseArray = (arr) => {
const { length } = arr;
return Array.from(
arr,
(_, i) => arr[length - 1]
);
};
另请注意,所有这些实现都返回一个新数组,但它们不会就地反转该数组。(任何就地反转数组的函数都是不纯的,因为这会产生副作用。)最好选择与 不同的名称,或者,reverseArrayInPlace如果您确实想就地反转数组,请放弃纯洁,因为这是不可能的。
添加回答
举报
0/150
提交
取消