Hoe een object toe te voegen aan een array

Hoe kan ik een object toevoegen aan een array (in javascript of jQuery)?
Wat is bijvoorbeeld het probleem met deze code?

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

Ik wil deze code graag gebruiken om veel objecten op te slaan in de reeks Function1 en Oproep Function2 om het object in de array te gebruiken.

  1. Hoe kan ik een object opslaan in een array?
  2. Hoe kan ik een object in een array plaatsen en op een variabele opslaan?

Antwoord 1, Autoriteit 100%

Plaats alles in een array met array.push ().

var a=[], b={};
a.push(b);    
// a[0] === b;

Extra informatie over arrays

Voeg meer dan één item tegelijk toe

var x = ['a'];
x.push('b', 'c');
// x = ['a', 'b', 'c']

Voeg items toe aan het begin van een array

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']

Voeg de inhoud van één array toe aan een ander

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

Maak een nieuwe array uit de inhoud van twee arrays

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']

Antwoord 2, autoriteit 9%

var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}

hier heeft matrixjaren waarden als

years[0]={operator:2015}
years[1]={operator:2016}

het gaat zo verder.


Antwoord 3, autoriteit 8%

Allereerst is er geen objectof array. Er zijn objecten array. Ten tweede, kuntdat doen:

a = new Array();
b = new Object();
a[0] = b;

Nu zal aeen array zijn met bals het enige element.


Antwoord 4, autoriteit 6%

Met de notatie ES6kun je zoiets als dit doen:

Voor het toevoegen kunt u de spread-operator gebruiken zoals dit:

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);

Antwoord 5, autoriteit 3%

  • JavaScript is hoofdlettergevoelig . Bellen new array()en new object()Gooi een ReferenceErroromdat ze niet bestaan.
  • Het is beter om te vermijden new array()vanwege de foutgevoelig gedrag .
    Wijs in plaats daarvan de nieuwe array toe met = [val1, val2, val_n]. Gebruik voor objecten = {}.
  • Er zijn veel manieren als het gaat om uitbreiding van een array (zoals getoond in John’s antwoord ) maar de veiligste manier zou Wees gewoon om concatin plaats van push. concatRetourneert een nieuwe array, waardoor de originele array onaangeroerd wordt. pushMuteert de roeparray die moet worden vermeden , vooral als de array wereldwijd wordt gedefinieerd.
  • Het is ook een goede praktijk voor Freeze de voorwerp evenals de nieuwe array om onbedoelde mutaties te voorkomen. Een bevroren object is geen van beide inzet noch extensibel (ondiep).

Die punten toepassen en om uw twee vragen te beantwoorden, kunt u een functie als volgt definiëren:

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}

Gebruik:

// Given
const myArray = ["A", "B"];
// "save it to a variable"
const newArray = appendObjTo(myArray, {hello: "world!"});
// returns: ["A", "B", {hello: "world!"}]. myArray did not change.

Antwoord 6, autoriteit 2%

/* array literal */
var aData = [];
/* object constructur */
function Person(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}
/* store object into array */
aData[aData.length] = new Person("Java", "Script"); // aData[0]
aData.push(new Person("Jhon", "Doe"));
aData.push(new Person("Anna", "Smith"));
aData.push(new Person("Black", "Pearl"));
aData[aData.length] = new Person("stack", "overflow"); // aData[4]
/* loop array */
for (var i in aData) {
  alert(aData[i].fullname());
}
/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);

Antwoord 7

Gabi Purcaru’s antwoord uitbreiden met een antwoord op nummer 2.

a = new Array();
b = new Object();
a[0] = b;
var c = a[0]; // c is now the object we inserted into a...

Antwoord 8

Met push kun je zelfs meerdere objecten aan een array toevoegen

 let myArray = [];
   myArray.push(
              {name:"James", dataType:TYPES.VarChar, Value: body.Name},
              {name:"Boo", dataType:TYPES.VarChar, Value: body.Name},
              {name:"Alina", dataType:TYPES.VarChar, Value: body.Name}
             );

Antwoord 9

obejctis duidelijk een typefout. Maar zowel objectals arrayhebben hoofdletters nodig.

Je kunt korte handen gebruiken voor new Arrayen new Objectdit zijn []en {}

Je kunt gegevens in de array pushen met .push. Dit voegt het toe aan het einde van de array. of u kunt een index instellen om de gegevens te bevatten.

function saveToArray() {
    var o = {};
    o.foo = 42;
    var arr = [];
    arr.push(o);
    return arr;
}
function other() {
    var arr = saveToArray();
    alert(arr[0]);
}
other();

Antwoord 10

Op alternatief antwoord is dit.

als je een array hebt zoals deze: var contacts = [bob, mary];

en u wilt een andere array in deze array plaatsen, dan kunt u dat op deze manier doen:

Declareer de functieconstructor

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

maak het object van de functie:

var add1 = new add("Alba","Fas","[email protected]","[098] 654365364");

en voeg het object toe aan de array:

contacts[contacts.length] = add1;

Antwoord 11

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

Antwoord 12

De manier waarop ik objectmaker heb gemaakt met automatische lijst:

var list = [];
function saveToArray(x) {
    list.push(x);
};
function newObject () {
    saveToArray(this);
};

Antwoord 13

U loopt tegen een scopeprobleem aan als u uw code als zodanig gebruikt. Je moet het buiten de functies declareren als je van plan bent het ertussen te gebruiken (of als je het aanroept, geef het door als een parameter).

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

Antwoord 14

Prestaties

Vandaag 2020.12.04 voer ik tests uit op MacOs HighSierra 10.13.6 op Chrome v86, Safari v13.1.2 en Firefox v83 voor gekozen oplossingen.

Resultaten

Voor alle browsers

  • in-place oplossing op basis van length(B) is het snelst voor kleine arrays, en in Firefox ook voor grote en voor Chrome en Safari is snel
  • in-place oplossing gebaseerd op push(A) is het snelst voor grote arrays in Chrome en Safari, en snel voor Firefox en kleine arrays
  • in-place oplossing C is traag voor grote arrays en gemiddeld snel voor kleine
  • non-in-place oplossingen D en E zijn traag voor grote arrays
  • non-in-place oplossingen E,F en D (in Firefox) zijn traag voor kleine arrays

Details

Ik voer 2 testgevallen uit:

  • voor kleine array met 10 elementen – U kunt het uitvoeren hier
  • voor grote array met 1M-elementen – je kunt het uitvoeren hier

Hieronder snippet presenteert verschillen tussen oplossingen
a ,
b ,
C ,
d ,
e ,
f

PS: Antwoord B werd verwijderd – maar eigenlijk was het het eerste antwoord dat deze techniek gebruikt, dus als u toegang hebt om het te zien, klik dan op “Undelete”.

Other episodes