如何从“参数”中获取切片

时间:2012-03-01 03:09:00

标签: javascript

你知道arguments是一个特殊的对象,它包含传递给函数的所有参数。

只要它不是数组 - 你就不能使用像arguments.slice(1)这样的东西。

所以问题是 - 如何从arguments开始切割除第一个元素之外的所有元素?

UPD

似乎没有办法将它转换为带有

的数组
var args = Array.prototype.slice.call(arguments);

如果有人发布了另一个解决方案,那就太好了,如果不是的话 - 我会用上面的一行作为答案检查第一个。

7 个答案:

答案 0 :(得分:129)

问。如何从arguments

中切割除第一个元素之外的所有内容

以下将返回一个包含除第一个以外的所有参数的数组:

var slicedArgs = Array.prototype.slice.call(arguments, 1);

您不必先将arguments转换为数组,只需一步即可完成。

答案 1 :(得分:11)

您可以通过程序性地遍历参数对象来“切片而不切片”:

function fun() {
  var args = [];

  for (var i = 1; i < arguments.length; i++) {
    args.push(arguments[i]);
  }

  return args;
}

fun(1, 2, 3, 4, 5); //=> [2, 3, 4, 5]

答案 2 :(得分:11)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

  

你不应该对参数进行切片,因为它会阻止优化   JavaScript引擎(例如V8)。相反,尝试构建一个新的   数组通过遍历参数对象。

所以Paul Rosiana上面的回答是正确的

答案 3 :(得分:9)

实际上并不需要干预数组函数。

使用rest parameter syntax ...rest更简洁,更方便。

示例

function argumentTest(first, ...rest) {
  console.log("First arg:" + first);

  // loop through the rest of the parameters
    for(let arg of rest){
        console.log("- " + arg);
    }
}

// call your function with any number of arguments
argumentTest("first arg", "#2", "more arguments", "this is not an argument but a contradiction");

<强> ...休息

答案 4 :(得分:6)

这可以是一种方式:

var args = Array.from(arguments).slice(1);

答案 5 :(得分:0)

您可以使用方法[].slice.call(arguments, 1)

[]。切片会返回切片功能对象,您可以将其称为arguments1是参数

答案 6 :(得分:0)

您可以在函数内使用... rest来分隔第一个参数和其余参数:

function foo(arr) {
  const [first, ...rest] = arguments;
  console.log(`first = ${first}`);
  console.log(`rest = ${rest}`);
}
//Then calling the function with 3 arguments:
foo(1,2,3)