JavaScript 纯函数

我想知道这是否是一个纯 JavaScript 函数。如果不是,我想了解原因。


function reverseArrayInPlace(array1) { 

  let array2 = [];

  for (let i = array1.length - 1; i >= 0; i--) {

    array2.push(array1[i]);

  }

  return array2;

}

谢谢您的帮助!


慕斯王
浏览 101回答 1
1回答

跃然一笑

由于纯函数必须在给定相同输入的情况下产生相同的输出,并且没有副作用,因此您的代码是纯的(假设参数将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如果您确实想就地反转数组,请放弃纯洁,因为这是不可能的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript