Cara menambahkan objek ke array

317

Bagaimana saya bisa menambahkan objek ke array (dalam javascript atau jquery)? Misalnya, apa masalah dengan kode ini?

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

Saya ingin menggunakan kode ini untuk menyimpan banyak objek dalam array function1 dan memanggil function2 untuk menggunakan objek dalam array.

  1. Bagaimana saya bisa menyimpan objek dalam array?
  2. Bagaimana saya bisa meletakkan objek dalam array dan menyimpannya ke variabel?
naser
sumber
12
Tolong jangan memperbaiki kesalahan dalam kode diposting, seperti yang dilakukan edit 5. Jika Anda memperbaiki kesalahan sederhana dalam pertanyaan, sering kali tidak ada alasan untuk jawaban itu ada.
Paul
Juga, pushsudah disarankan beberapa kali di sini. Tolong, jangan mencemari utas ini lagi dengan pushsaran lain .
Boghyon Hoffmann

Jawaban:

631

Masukkan sesuatu ke dalam array menggunakan Array.push ().

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

Informasi tambahan tentang Array

Tambahkan lebih dari satu item sekaligus

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

Tambahkan item ke awal array

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

Tambahkan konten dari satu array ke array lainnya

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)

Buat array baru dari konten dua array

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']
John Strickler
sumber
Saya juga punya pertanyaan: myArray = []; myArray.push ({'text': 'some text', 'id': 13}); dan sekarang myArray kosong. Jadi jika kita mencoba mendapatkan nilai dari myArray [0] ['text'] itu akan kosong, mengapa? take.ms/jSvbn
fdrv
Sepertinya ada sesuatu yang tidak beres. Pastikan tidak ada masalah pelingkupan. Gunakan let / var untuk mendeklarasikan myArray. Karena myArray.push akan selalu bermutasi myArray.
John Strickler
58
var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}

di sini tahun array memiliki nilai-nilai seperti

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

terus seperti ini.

santhosh
sumber
55

Pertama-tama, tidak ada objectatau array. Ada Objectdan Array. Kedua, Anda bisa melakukan itu:

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

Sekarang aakan menjadi array dengan bsebagai satu-satunya elemen.

Gabi Purcaru
sumber
4
+1 untuk jawaban yang tidak terlalu rumit. Saya telah mengembangkannya di bawah ini untuk menyertakan jawaban untuk pertanyaan OP 2.
Sam
30

Menggunakan ES6notasi, Anda dapat melakukan sesuatu seperti ini:

Untuk menambahkan Anda dapat menggunakan operator spread seperti ini:

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

Aayushi
sumber
20
  • JavaScript peka huruf besar-kecil . Memanggil new array()dan new object()akan melempar ReferenceErrorkarena mereka tidak ada.
  • Lebih baik untuk menghindari new Array()karena perilaku rawan kesalahannya .
    Alih-alih, tetapkan array baru dengan = [val1, val2, val_n]. Untuk objek, gunakan= {} .
  • Ada banyak cara untuk memperluas array (seperti yang ditunjukkan pada jawaban John ) tetapi cara teraman hanya dengan menggunakan concatalih-alih push. concatmengembalikan array baru, membiarkan array asli tidak tersentuh. pushbermutasi array panggilan yang harus dihindari , terutama jika array didefinisikan secara global.
  • Ini juga merupakan praktik yang baik untuk membekukan objek serta array baru untuk menghindari mutasi yang tidak diinginkan. Objek yang membeku tidak bisa berubah atau dapat diperluas (dangkal).

Menerapkan poin-poin itu dan untuk menjawab dua pertanyaan Anda, Anda bisa mendefinisikan fungsi seperti ini:

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

Pemakaian:

// 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.
Boghyon Hoffmann
sumber
2
"Penggunaan" adalah apa yang menjadikan ini jawaban pilihan pribadi saya.
HPWD
@ Boghyon, saya ingin tahu tentang pembekuan dan mutasi. Apakah Anda berbicara tentang perubahan pada array yang dapat terjadi secara langsung karena metode concat, atau karena perubahan yang mungkin dilakukan pada array dari tempat lain dalam skrip saat dalam proses melakukan '.concat ()'? Jika yang kedua, bukankah ini harus dicegah secara otomatis karena javascript menjadi single-threaded, bahkan dalam kasus kode asinkron karena kontrol seharusnya, setidaknya secara teoritis, tidak dikembalikan sampai metode selesai?
jdmayfield
@ jdmayfield: Strategi evaluasi JS adalah panggilan dengan berbagi objek . Ketika benda-benda dilewatkan, mereka tidak disalin. Mutasi pada objek-objek itu, ketika sedang diedarkan, selalu segera terlihat oleh penelepon terlepas dari apakah mutator itu disebut tidak sinkron, selesai, atau tidak. Karena efek samping seperti itu sering menyebabkan bug, kami mengembalikan objek baru, dipisahkan dari yang asli. Membuat objek tidak berubah (misalnya via freeze) hanyalah langkah tambahan untuk mencegah mutasi yang tidak diinginkan.
Boghyon Hoffmann
@ jdmayfield: Tapi seperti yang sudah Anda duga, membuat objek baru setiap kali mungkin menjadi tidak efisien dengan cepat ketika objek menjadi besar. Untuk kasus seperti itu, ada lib bermanfaat, yang membuatnya efisien dengan memanfaatkan struktur data yang persisten, seperti Mori (agak mati) dan Immutable.js . Berikut ini adalah pengantar singkat untuk "mengapa tidak dapat diubah
Boghyon Hoffmann
9

Memperluas jawaban Gabi Purcaru dengan memasukkan jawaban ke nomor 2.

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

var c = a[0]; // c is now the object we inserted into a...
Sam
sumber
8

/* array literal */
var aData = [];

/* object constructur */
function Data(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}

/* store object into array */
aData[aData.length] = new Data("Java", "Script"); // aData[0]

aData.push(new Data("Jhon", "Doe"));
aData.push(new Data("Anna", "Smith"));
aData.push(new Data("Black", "Pearl"));

aData[aData.length] = new Data("stack", "overflow"); // aData[4]

/* loop arrray */
for (var x in aData) {
  alert(aData[x].fullname());
}

/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);

antelove
sumber
7

obejctjelas salah ketik. Tapi keduanya objectdanarray perlu huruf kapital.

Anda dapat menggunakan tangan pendek untuk new Arraydan new Objectini[] dan{}

Anda dapat mendorong data ke dalam array menggunakan .push. Ini menambahkannya ke akhir array. atau Anda dapat mengatur indeks untuk berisi data.

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

function other() {
    var arr = saveToArray();
    alert(arr[0]);
}

other();
Raynos
sumber
5

Pada alternatif jawaban adalah ini.

jika Anda memiliki dan array seperti ini: var contacts = [bob, mary];

dan Anda ingin meletakkan array lain di array ini, Anda bisa melakukannya dengan cara ini:

Nyatakan konstruktor fungsi

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

buat objek dari fungsi:

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

dan tambahkan objek ke array:

contacts[contacts.length] = add1;
Po Po
sumber
3
a=[];
a.push(['b','c','d','e','f']);
Harjinder Singh
sumber
6
Hai, selamat datang di SO. Tolong jangan hanya membuang kode sebagai jawaban. Jelaskan pemikiran Anda sehingga pengguna dapat lebih memahami apa yang terjadi. Terima kasih.
Cthulhu
2

Cara saya membuat pembuat objek dengan daftar otomatis:

var list = [];

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

function newObject () {
    saveToArray(this);
};
Tadas Stundys
sumber
0

Anda mengalami masalah ruang lingkup jika Anda menggunakan kode Anda seperti itu. Anda harus mendeklarasikannya di luar fungsi jika Anda berencana menggunakannya di antara mereka (atau jika memanggil, kirimkan sebagai 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
josh.trow
sumber