我不明白在我的代码中使用push与使用unshift之间的区别

时间:2015-04-11 00:18:10

标签: javascript arrays push

我应该创建一个名为reversePlusOne的函数。这个功能应该:

取一个参数,一个至少包含两个数字的数组。 这个函数应该返回: 阵列颠倒,前面加1。 当我使用push(1)工作,但当我使用unshift它没有。有人可以解释

return a.push(1), a.reverse();
return a.reverse(), a.unshift(1);

5 个答案:

答案 0 :(得分:2)

reverse返回数组。 unshift返回新的长度,请阅读docs。因此

return a.push(1), a.reverse();
return a.reverse(), a.unshift(1), a;

答案 1 :(得分:1)

push添加到数组的末尾,unshift添加到开头

var arr = [8,5];
// this creates an array with 8 and 5 
arr.reverse()
// this reverses the array
arr.unshift(1);
// this adds to the beginning of the array.
arr.push(1);
// this adds to the end of the array.

这是一个小提琴:http://jsfiddle.net/50s8xvqx/1/

答案 2 :(得分:1)

回答你的问题,这是一个例子。

反向

arr = [0,1,2,3];

arr.reverse();

arr is now equal to [3,2,1,0], it has been reversed

arr = [0,1,2,3];

arr.push(1);

arr is now equal to [1,0,1,2,3], note that we pushed the 1 on to the end

不印字

arr = [0,1,2,3];

arr.unshift(1);

arr is now equal to [1,0,1,2,3], note that we added the 1 to the 0 index

推送和反转

arr = [0,1,2,3];

arr.push(1);

arr.reverse();

arr is now equal to [1,3,2,1,0], we pushed a value to the end and then reversed the order

取消加速和反转

arr = [0,1,2,3];

arr.unshift(1);

arr.reverse();

arr is now equal to [3,2,1,0,1], we pushed a 1 to the 0 index and reversed

在查看这些示例后,您应该看到问题的答案。

答案 3 :(得分:0)

问题不在于操作,而在于它们的返回值。

return a.push(1), a.reverse();

首先,逗号运算符返回其第二个参数,但是利用它有点误导。如果它是这样写的,那就更清楚了:

a.push(1);
return a.reverse();

现在,reverse修改了数组,但它也返回了数组(带有新值),因此产生了正确的结果。而你的第二个版本:

return a.reverse(), a.unshift(1);

与此相同:

a.reverse();
return a.unshift(1);

所以你要将数组修改为正确的值,但是你返回的不是那个数组。相反,您将返回unshift的返回值,它与push一样,返回数组的新长度,而不是数组本身。

以下两个版本是等效的:

a.push(1);
a.reverse();
return a;

a.reverse();
a.unshift(1);
return a;

答案 4 :(得分:0)

带有多个逗号分隔表达式的return语句运行这些表达式,然后返回最后一个表达式的结果,

例如,假设您已退回此声明

return 1+1,5,7+78;

在这种情况下返回的值是85,这是对最后一个表达式的评估。

回到你的问题,正如@torazaburo所说:

  • unshift() 方法会将新项目添加到数组的开头,而会返回新的长度
  • reverse() 方法反转数组中元素的顺序,返回反转数组

所以,

return a.push(1), a.reverse();

返回最后一个表达式值 a.reverse()

return a.reverse(), a.unshift(1);

返回最后一个表达式返回的内容,表示 a.unshift(1)返回值。