397 Stimmen

Hinzufügen eines Objekts zu einem Array

Wie kann ich hinzufügen ein Objekt in ein Array (in javascript oder jquery)? Zum Beispiel, was ist das Problem mit diesem Code?

function() {
  var a = new array();
  var b = new object();
  a[0] = b;
}

Ich möchte diesen Code verwenden, um viele Objekte im Array von function1 zu speichern und function2 aufzurufen, um das Objekt im Array zu verwenden.

  1. Wie kann ich ein Objekt in einem Array speichern?
  2. Wie kann ich ein Objekt in ein Array einfügen und es in einer Variablen speichern?

6voto

Po Po Punkte 231

Eine alternative Antwort ist diese.

wenn Sie ein Array wie dieses haben: var contacts = [bob, mary];

und Sie möchten ein anderes Array in dieses Array einfügen, können Sie das auf diese Weise tun:

Deklarieren Sie den Funktionskonstruktor

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}

das Objekt aus der Funktion machen:

var add1 = new add("Alba","Fas","Des@gmail.com","[098] 654365364");

und fügen Sie das Objekt in das Array ein:

contacts[contacts.length] = add1;

4voto

harjinder singh Punkte 51
a=[];
a.push(['b','c','d','e','f']);

3voto

Tadas Stundys Punkte 31

Die Art und Weise, wie ich den Object Creator mit Auto-Liste erstellt habe:

var list = [];

function saveToArray(x) {
    list.push(x);
};

function newObject () {
    saveToArray(this);
};

2voto

Kamil Kiełczewski Punkte 69048

Leistung

Heute 2020.12.04 führe ich Tests auf MacOs HighSierra 10.13.6 mit Chrome v86, Safari v13.1.2 und Firefox v83 für ausgewählte Lösungen durch.

Ergebnisse

Für alle Browser

  • In-Place-Lösung basierend auf length (B) ist am schnellsten für kleine Arrays, und in Firefox für große zu und für Chrome und Safari ist schnell
  • In-Place-Lösung basierend auf push (A) ist am schnellsten für große Arrays in Chrome und Safari, und schnell für Firefox und kleine Arrays
  • In-Place-Lösung C ist langsam für große Arrays und mittelschnell für kleine
  • Die Lösungen D und E sind bei großen Arrays langsam.
  • Nicht-platzierte Lösungen E, F und D (auf Firefox) sind langsam für kleine Arrays

enter image description here

Einzelheiten

Ich führe 2 Testfälle durch:

  • für ein kleines Array mit 10 Elementen - Sie können es ausführen AQUÍ
  • für große Arrays mit 1M Elementen - Sie können es ausführen AQUÍ

Der folgende Ausschnitt zeigt die Unterschiede zwischen den Lösungen A , B , C , D , E , F

PS: Antwort B wurde gelöscht - aber eigentlich war es die erste Antwort, die diese Technik verwendet. Wenn Sie also Zugang haben, um sie zu sehen, klicken Sie bitte auf "Wiederherstellen".

// https://stackoverflow.com/a/6254088/860099
function A(a,o) {
  a.push(o);
  return a;
} 

// https://stackoverflow.com/a/47506893/860099
function B(a,o) {
  a[a.length] = o;
  return a;
} 

// https://stackoverflow.com/a/6254088/860099
function C(a,o) {
  return a.concat(o);
}

// https://stackoverflow.com/a/50933891/860099
function D(a,o) {
  return [...a,o];
}

// https://stackoverflow.com/a/42428064/860099
function E(a,o) {
  const frozenObj = Object.freeze(o);
  return Object.freeze(a.concat(frozenObj));
}

// https://stackoverflow.com/a/6254088/860099
function F(a,o) {
  a.unshift(o);
  return a;
} 

// -------
// TEST
// -------

[A,B,C,D,E,F].map(f=> {
  console.log(`${f.name} ${JSON.stringify(f([1,2],{}))}`)
})

<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"> </script>

This shippet only presents functions used in performance tests - it not perform tests itself!

Und hier sind Beispielergebnisse für Chrom

enter image description here

0voto

josh.trow Punkte 4777

Sie haben ein Problem mit dem Geltungsbereich, wenn Sie Ihren Code als solchen verwenden. Sie müssen ihn außerhalb der Funktionen deklarieren, wenn Sie ihn zwischen den Funktionen verwenden wollen (oder ihn beim Aufruf als Parameter übergeben).

var a = new Array();
var b = new Object();

function first() {
a.push(b);
// Alternatively, a[a.length] = b
// both methods work fine
}

function second() {
var c = a[0];
}

// code
first();
// more code
second();
// even more code

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