我想知道这段简单代码失败的原因:
var arr = [1, 2, 3];
arr.push(arr[0]).shift();
console.log(arr);
它在firebug控制台中返回“TypeError:arr.push(...)。shift不是函数”
我认为这是因为我调用了shift()方法而不是在数组上,而是在push元素上调用。
是否有一种更优雅的方式来获得相同的结果,
var arr = [1, 2, 3];
arr.push(arr[0]);
arr.shift();
console.log(arr);
生产?
提前致谢!
答案 0 :(得分:3)
来自the MDN:
push()方法将一个或多个元素添加到数组的末尾 返回数组的新长度。
arr.push(arr[0])
没有返回数组,但显然没有shift
函数的数字。
据我所知,没有简单的表达式将元素推送到数组并返回该数组。但在您的情况下,您可以简单地撤消操作并执行
arr.push(arr.shift());
答案 1 :(得分:1)
答案 2 :(得分:0)
基本上这个问题是说,我可以以某种方式"优雅"表达将数组的第一项移动到最后的概念。幸运的是,JS是一种图灵完备语言,它允许我们定义函数,因此"优雅"答案就是
public void CustomPaste(Office.IRibbonControl control, bool cancelDefault)
{
//Globals.ThisAddin.Application.Selection.Paste();
//Check if the pasted content is image and then add caption to it
}
现在仅仅定义rotate(arr)
。旋转是删除 添加 head 元素结果中的第一个元素到结尾:
rotate
现在function rotate(arr) { return drop(add(arr, head(arr))); }
是
drop
和function drop(arr) { return arr.shift(), arr; }
当然是
head
和function head(arr) { return arr[0]; }
是
add
我还可以编写一个函数,使用function add(arr, elt) { return arr.push(elt), arr; }
将n
元素从位置i
移动到位置j
,如下所示:
splice
然后function move(arr, n, i, j) {
arr.splice.apply(arr, [j-n+1, 0].concat(arr.splice(i, n)));
return arr;
}
要移动一个元素开头到结束:
rotate