467 Stimmen

Wie kann ich das Objekt "arguments" in ein Array in JavaScript umwandeln?

El arguments Objekt in JavaScript ist eine seltsame Warze - es verhält sich in den meisten Situationen wie ein Array, aber es ist nicht eigentlich ein Array-Objekt. Da es sich um wirklich etwas ganz anderes verfügt es nicht über die nützlichen Funktionen von Array.prototype wie forEach , sort , filter und map .

Es ist trivial einfach, ein neues Array aus einem Argument-Objekt mit einer einfachen for-Schleife zu konstruieren. Zum Beispiel sortiert diese Funktion ihre Argumente:

function sortArgs() {
    var args = [];
    for (var i = 0; i < arguments.length; i++)
        args[i] = arguments[i];
    return args.sort();
}

Allerdings ist dies eine ziemlich erbärmliche Sache zu tun, nur um Zugang zu den äußerst nützlichen JavaScript-Array-Funktionen zu bekommen. Gibt es einen eingebauten Weg, um es mit der Standardbibliothek zu tun?

1 Stimmen

0 Stimmen

Es gefällt mir nicht, dass alle Antworten auf diese Frage die Absicht erkennen lassen, eine Sortierung vorzunehmen, und sort hat alle Antworten durchdrungen, aber das Sortieren war nur ein Beispiel von etwas, das Sie könnte tun mit einer geeigneten Anordnung. Die Absicht war, das Array zu erhalten. Ich kann die Frage nicht einmal tadeln, weil es richtig "zum Beispiel" heißt. Dennoch hat jede Antwort beschlossen, "sortieren" in das Beispiel für die Umwandlung der Argumente in ein Array einzubauen - manchmal zu eng, indem man das Sortieren mit dem Erhalten eines Arrays von Argumenten verwechselt.

0voto

wsc Punkte 904
function sortArgs(...args) {
  return args.sort(function (a, b) { return a - b; });
}

document.body.innerHTML = sortArgs(1, 2, 3, 4).toString();

0voto

Obwohl Ruheparameter gut funktionieren, sollten Sie, wenn Sie weiterhin die arguments aus irgendeinem Grund in Betracht ziehen

function sortArgs() {
  return [...arguments].sort()
}

[...arguments] kann als eine Art Alternative betrachtet werden zu Array.from(arguments) was ebenfalls sehr gut funktioniert.

Eine ES7-Alternative ist ein Array-Verständnis:

[for (i of arguments) i].sort()

Dies könnte am einfachsten sein, wenn Sie die Argumente vor dem Sortieren verarbeiten oder filtern wollen:

[for (i of arguments) if (i % 2) Math.log(i)].sort()

0voto

Gaurav Punkte 793
 function x(){
   var rest = [...arguments]; console.log(rest);return     
   rest.constructor;
 };
 x(1,2,3)

Ich habe eine einfache Zerstörungstechnik ausprobiert

0voto

Rick Punkte 987

Das Arguments-Objekt ist nur innerhalb eines Funktionskörpers verfügbar. Obwohl Sie das Arguments-Objekt wie ein Array indizieren können, ist es kein Array. Es hat keine anderen Array-Eigenschaften als die Länge.

// function arguments length 5
function properties(a,b,c,d,e){
var function_name= arguments.callee.name
var arguments_length= arguments.length;
var properties_length=  properties.length; 
var function_from= properties.caller.name;
console.log('I am the function name: '+ function_name);
console.log('I am the function length, I am function spacific: '+ properties_length); 
console.log('I am the arguments length, I am context/excution spacific: '+ arguments_length);
console.log('I am being called From: '+  function_from );
}

// arguments 3
function parent(){
properties(1,2,3);
}

//arguments length 3 because execution spacific
parent();

Obwohl es wie ein Array indiziert werden kann, wie Sie in diesem Beispiel sehen können:

function add(){

var sum=0;

for(var i=0; i< arguments.length;i++){

sum = sum + arguments[i];

}

return sum;

}

console.log(add(1,2,3));

Das Arguments-Objekt ist jedoch kein Array und hat außer der Länge keine weiteren Eigenschaften.

Sie können das Argumente-Objekt in ein Array umwandeln und dann auf das Argumente-Objekt zugreifen.

Es gibt viele Möglichkeiten, auf das Argumente-Objekt innerhalb eines Funktionskörpers zuzugreifen, unter anderem:

  1. können Sie die Methode Array.prototoype.slice.call aufrufen.

Array.prototype.slice.call(argumente)

function giveMeArgs(arg1,arg2){

var args = Array.prototype.slice.call(arguments);
return args
}

console.log( giveMeArgs(1,2));
  1. können Sie das Array-Literal verwenden

[].slice.call(arguments).

function giveMeArgs(arg1,arg2){

var args = [].slice.call(arguments);

return args;

}

console.log( giveMeArgs(1,2) );
  1. können Sie Rest ...

    function giveMeArgs(...args){

    return args;

    }

    console.log(giveMeArgs(1,2))

  2. Sie können den Aufstrich [...]

    function giveMeArgs(){

    var args = [...arguments]; return args;

    }

    console.log(giveMeArgs(1,2));

  3. können Sie Array.from() verwenden

    function giveMeArgs(){

    var args = Array.from(arguments);

    return args;

    }

    console.log(giveMeArgs(1,2));

0voto

Alireza Punkte 92209

Sie können eine wiederverwendbare Funktion erstellen, um dies mit beliebigen Argumenten zu tun, die einfachste ist etwas wie dieses:

function sortArgs() {
  return [...arguments].sort();
}

sortArgs('ali', 'reza', 1, 2, 'a'); //[1, 2, "a", "ali", "reza"];

Die Spread-Syntax kann verwendet werden in ES6 und darüber...

Wenn Sie jedoch etwas verwenden möchten, das mit ES5 und darunter, können Sie Array.prototype.slice.call so dass Ihr Code wie folgt aussieht:

function sortArgs() {
  return Array.prototype.slice.call(arguments).sort();
}

sortArgs('ali', 'reza', 1, 2, 'a'); //[1, 2, "a", "ali", "reza"];

Es gibt auch einige andere Möglichkeiten, z. B. mit Array.from oder eine Schleife durch die Argumente und weisen sie einem neuen Array zu...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X