Как получить фрагмент из "аргументов"
Все, что вы знаете, что arguments
- это специальный объект, содержащий все аргументы, переданные функции.
И пока это не массив - вы не можете использовать что-то вроде arguments.slice(1)
.
Итак, вопрос - как разрезать все, кроме первого элемента из arguments
?
UPD
похоже, что нет способа без преобразования его в массив с
var args = Array.prototype.slice.call(arguments);
Если кто-то опубликует другое решение, было бы здорово, если бы не было - я проверил бы первый с приведенной выше строкой в качестве ответа.
Ответы
Ответ 1
Взаимодействие с функциями массива на самом деле не требуется.
Использование синтаксис параметра останова ...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");
... Rest
Ответ 2
Q. Как отрезать все, кроме первого элемента, от arguments
?
Далее будет возвращен массив, содержащий все аргументы, кроме первого:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
Вам не нужно сначала преобразовывать arguments
в массив, сделать все за один шаг.
Ответ 3
Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments:
Вы не должны нарезать аргументы, потому что это предотвращает оптимизацию в Двигатели JavaScript (например, V8). Вместо этого попробуйте построить новый массива, итерации через объект arguments.
Итак, ответ Пола Росяны выше правильно.
Ответ 4
Вы можете "разрезать без нарезки" путем процедурного перехода объекта аргументов:
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]
Ответ 5
Это может быть способ:
var args = Array.from(arguments).slice(1);
Ответ 6
Вы можете использовать метод [].slice.call(arguments, 1)
[]. slice вернет вам объект функции среза, и вы можете назвать его как arguments
и 1
параметры
Ответ 7
Вы можете использовать... отдохнуть внутри функции, чтобы отделить первый и остальные аргументы:
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)