Все, что вы знаете, arguments
- это специальный объект, который содержит все аргументы, переданные функции.
И пока это не массив - вы не можете использовать что-то вроде arguments.slice(1)
.
Итак, вопрос - как вырезать все, кроме первого элемента arguments
?
UPD :
похоже, что нет способа без преобразования его в массив с
var args = Array.prototype.slice.call(arguments);
Если кто-то опубликует другое решение, было бы здорово, если нет - я проверю первое со строкой выше в качестве ответа.
javascript
Зеркмс
источник
источник
arguments
преобразование его в массив и т. д. См. мой ответ ниже.Ответы:
На самом деле нет необходимости вмешиваться в функции массива.
Использование синтаксиса параметра rest
...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");
...Остаток
источник
В. Как вырезать все, кроме первого элемента
arguments
?Следующее вернет массив, содержащий все аргументы, кроме первого:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
Вам не нужно
arguments
сначала преобразовывать в массив, сделайте все за один шаг.источник
.slice()
наarguments
, но единственная причина , учитывая то , что это предотвращает JS двигателя оптимизации функции. Так что это не значит, что он не работает, просто он может быть медленнее. Я не собираюсь писать код для оптимизации в движке JS дня, не тогда, когда движок завтрашнего дня мог бы решить проблему оптимизации, и в любом случае разница, вероятно, не будет заметна пользователю в большинстве случаев. случаи. Лучше сначала написать ясный и простой в обслуживании код, а затем возвращаться и оптимизировать, только если возникает измеримая проблема с производительностью.Вы можете «нарезать без нарезки» процедурным обходом объекта arguments:
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]
источник
.slice()
;-)Array.prototype.slice
, но ваш вопрос был в том, есть ли другой способ.for
:-P)Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments :
Итак, ответ Пола Розианы выше правильный
источник
Это может быть способ:
var args = Array.from(arguments).slice(1);
источник
function foo(...args)
Вы можете использовать метод
[].slice.call(arguments, 1)
[] .slice вернет вам объект функции ломтика , и вы можете назвать это как
arguments
и1
те параметрыисточник
Вы можете использовать ... 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)
источник