我应该创建一个名为reversePlusOne的函数。这个功能应该:
取一个参数,一个至少包含两个数字的数组。 这个函数应该返回: 阵列颠倒,前面加1。 当我使用push(1)工作,但当我使用unshift它没有。有人可以解释
return a.push(1), a.reverse();
return a.reverse(), a.unshift(1);
答案 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所说:
所以,
return a.push(1), a.reverse();
返回最后一个表达式值 a.reverse()
和
return a.reverse(), a.unshift(1);
返回最后一个表达式返回的内容,表示 a.unshift(1)返回值。