为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 纯函数

JavaScript 纯函数

慕斯王 2023-07-29 15:35:16
我想知道这是否是一个纯 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如果您确实想就地反转数组,请放弃纯洁,因为这是不可能的。


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信