Menambahkan elemen ke objek

222

Saya perlu mengisi file json, sekarang saya punya sesuatu seperti ini:

{"element":{"id":10,"quantity":1}}

Dan saya perlu menambahkan "elemen" lainnya. Langkah pertama saya adalah menempatkan json itu menggunakan tipe Object cart = JSON.parse, sekarang saya perlu menambahkan elemen baru. Saya kira saya harus menggunakan cart.pushuntuk menambahkan elemen lain, saya mencoba ini:

var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);

Tapi saya mendapat kesalahan "Objek tidak memiliki metode push" ketika saya mencoba melakukannya element.push, dan saya pikir saya melakukan sesuatu yang SANGAT salah karena saya tidak memberi tahu "elemen" di mana saja.

Bagaimana saya bisa melakukan itu?

Sunting: maaf untuk semua yang saya miliki BANYAK kebingungan di kepala saya.

Saya pikir saya hanya bisa mendapatkan tipe objek ketika mengambil data dari JSON.parse, tapi saya mendapatkan apa yang saya masukkan ke dalam JSON.

Puting array bukan objek memecahkan masalah saya, saya menggunakan banyak saran juga, terima kasih semua!

HypeZ
sumber
Object.assign (target, sumber); dapat digunakan untuk menyalin semua properti dari objek sumber ke objek target.
David Spector

Jawaban:

287

Elemen Anda bukan array, namun keranjang Anda harus berupa array untuk mendukung banyak objek elemen. Contoh kode:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);

Jika Anda ingin kereta menjadi larik objek dalam formulir, { element: { id: 10, quantity: 1} }lakukan:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push({element: element});

JSON.stringify() disebutkan sebagai perhatian dalam komentar:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 
Konstantin Dinev
sumber
2
terima kasih, tetapi keranjang saya sekarang bukan array dan saya tidak bisa melakukan cart.push :( saya perlu objek untuk menggunakan JSON.stringify (kereta) setelah operasi ini
HypeZ
@ Hipype Anda masih bisa meregangkan keranjang jika itu adalah array objek.
Konstantin Dinev
Terima kasih lagi! Tapi data dasar saya adalah tipe objek penyebab "cart = JSON.parse (jsonfile)" pada awalnya .. saya tidak berpikir saya harus mengambil json sebagai objek, mengubahnya menjadi array, menambahkan elemen, merangkai ..
HypeZ
untuk beberapa alasan, objek saya menjadi dipenuhi dengan elemen terakhir saja. misal saya punya 4 item berbeda, tetapi dalam sebuah objek semua 4 elemen = solusi nilai terakhir yang saya temukan adalah create element = {}; dalam untuk, maka kerjanya dengan benar
Gorodeckij Dimitrij
1
@GorodeckijDimitrij Jika Anda menggunakan kembali objek elemen yang sama dan Anda mengisi kembali kunci itu dengan nilai-nilai baru, maka Anda akan memodifikasi satu dan contoh elemen yang sama, mendorongnya lagi dan lagi ke dalam array. Cukup gunakan objek elemen baru untuk setiap elemen yang Anda tambahkan, yang telah Anda lakukan dalam lingkup for-loop.
Konstantin Dinev
161

Dengan deretan itu

var element = {};

Anda mendefinisikan elementmenjadi objek biasa. Objek JavaScript asli tidak memiliki push()metode. Untuk menambahkan item baru ke objek biasa, gunakan sintaks ini:

element[ yourKey ] = yourValue;

Di sisi lain Anda bisa mendefinisikan elementsebagai array menggunakan

var element = [];

Lalu Anda bisa menambahkan elemen menggunakan push().

Sirko
sumber
4
element[ yourKey ] = yourValue;adalah cara terbaik untuk menambahkan elemen ke objek.
Pramesh Bajracharya
Tetapi Anda tidak dapat memberikan urutan elemen yang ditambahkan dalam objek dengan elemen [yourKey] = yourValue;
RollerCosta
2
@Ramesh Bajracharya Tidak menambahkan nilai ke elemen, itu hanya mengatur elemen saat ini ke nilai itu.
Hasen
1
@sommesh, bagaimana Anda ingin menyimpan duplikat? Anda bisa melakukannyaelement[ yourkey ] = [ element{yourkey], yourNewValue ];
Sirko
1
@sommesh ini akan memberi Anda kunci duplikat, yang menurut definisi tidak mungkin dalam objek JS. Anda hanya dapat mengumpulkan beberapa nilai untuk satu kunci seperti yang saya tunjukkan sebelumnya.
Sirko
21

Jika keranjang harus disimpan sebagai objek dan bukan array (Meskipun saya akan merekomendasikan menyimpan sebagai []) Anda selalu dapat mengubah struktur untuk menggunakan ID sebagai kuncinya:

var element = { quantity: quantity };
cart[id] = element;

Ini memungkinkan Anda untuk menambahkan banyak item ke keranjang seperti:

cart["1"] = { quantity: 5};
cart["2"] = { quantity: 10};

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }
Craig MacGregor
sumber
terima kasih, tetapi keranjang saya harus menjadi objek dan bukan array :(
HypeZ
3
Salah satu alasan untuk menggunakan objek seperti ini, adalah jika Anda perlu menghapus item. Menghapus kunci dari objek jauh lebih mudah daripada menghapus kunci dari array.
bryc
Jika komentar array HypeZ membuat siapa pun bingung, jawaban Craig tidak menambahkan array, tanda kurung [] digunakan untuk mengakses properti. Uji di sini di jsfiddle dan bacalah di sini di Mozilla dan di sini ada artikel bagus di Digital Ocean yang saya harap saya temui lama sekali.
Hastig Zusammenstellen
12

Untuk menambahkan ke objek gunakan Object.assign

var ElementList ={}

function addElement (ElementList, element) {
    let newList = Object.assign(ElementList, element)
    return newList
}
console.log(ElementList)

Keluaran:

{"element": {"id": 10, "quantity": 1}, "element": {"id": 11, "quantity": 2}}

Melvin Chipimo
sumber
Ini mungkin cara paling fungsional untuk melakukan sesuatu, tetapi pengembang javascript pendatang baru mungkin tidak akan mengerti hal ini.
codeninja
1
saya mencobanya tetapi akan menimpa elemen yang ada, karena keduanya memiliki nama yang sama element, sehingga hanya akan memiliki elemen terakhir.
Haritsinh Gohil
6

Anda harus menulis var element = [];
dalam javascript {}adalah objek kosong dan []array kosong.

shift66
sumber
6
cart.push({"element":{ id: id, quantity: quantity }});
Cris
sumber
4
tidak dapat melakukan cart.push karena kereta adalah objek sekarang! :(
HypeZ
ada alasan khusus mengapa itu adalah objek daripada array?
Cris
karena saya mendapatkannya dari "cart = JSON.parse (jsonfile)" dan itu memberikan objek
HypeZ
6

Saya sedang membaca sesuatu yang berkaitan dengan percobaan ini jika itu berguna.

1. Tetapkan fungsi push di dalam objek.

let obj={push:function push(element){ [].push.call(this,element)}};

Sekarang Anda bisa mendorong elemen seperti array

obj.push(1)
obj.push({a:1})
obj.push([1,2,3])

Ini akan menghasilkan objek ini

obj={
 0: 1
 1: {a: 1}
 2: (3) [1, 2, 3]
 length: 3
}

Perhatikan elemen yang ditambahkan dengan indeks dan juga melihat bahwa ada properti panjang baru yang ditambahkan ke objek. Ini akan berguna untuk menemukan panjang objek juga. Ini berfungsi karena sifat push()fungsi yang generik

Thakur Karthik
sumber
5
function addValueInObject(object, key, value) {
    var res = {};
    var textObject = JSON.stringify(object);
    if (textObject === '{}') {
        res = JSON.parse('{"' + key + '":"' + value + '"}');
    } else {
        res = JSON.parse('{' + textObject.substring(1, textObject.length - 1) + ',"' + key + '":"' + value + '"}');
    }
    return res;
}

kode ini berfungsi.

pashifika
sumber
3

Coba ini:

var data = [{field:"Data",type:"date"},  {field:"Numero",type:"number"}];

var columns = {};

var index = 0;

$.each(data, function() {

    columns[index] = {
        field : this.field,
        type : this.type
    };

    index++;
});

console.log(columns);
pengguna3910831
sumber
3

Menambahkan elemen kunci / pasangan baru ke objek asli:

const obj = { a:1, b:2 }
const add = { c:3, d:4, e: ['x','y','z'] }

Object.entries(add).forEach(([key,value]) => {obj[key] = value })

nilai baru obj:

{a: 1, b: 2, c: 3, d: 4, e: ["x", "y", "z"] }
Banzy
sumber
2

Jika ada yang datang mencari untuk membuat JSON serupa, hanya tanpa menggunakan cartsebagai array, begini:

Saya memiliki berbagai objek myArrsebagai:

var myArr = [{resourceType:"myRT",
            id: 1,
            value:"ha"},
            {resourceType:"myRT",
            id: 2,
            value:"he"},
            {resourceType:"myRT",
            id: 3,
            value:"Li"}];

dan saya akan mencoba membuat JSON dengan struktur berikut:

{
 "1":{"resourceType":"myRT","id":"1","value":"ha"},
 "2":{"resourceType":"myRT","id":"2","value":"he"},
 "3":{"resourceType":"myRT","id":"3","value":"Li"}
}

Anda bisa melakukan-

var cart = {};
myArr.map(function(myObj){
                    cart[myObj.id]= myObj;
                    });
Saad Patel
sumber
Bagaimana Anda menambahkan nilai ke struktur JSON baru yang telah Anda buat?
Jude Fernandes
1
@JudeFernandes cart[key]=valuepada dasarnya adalah peta nilai kunci. Jangan pilih-pilih jika jawabannya membantu. Terima kasih!
Saad Patel
2

Bagi siapa pun yang masih mencari solusi, saya pikir objek seharusnya disimpan dalam array seperti ...

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);

Kemudian ketika Anda ingin menggunakan elemen sebagai objek Anda bisa melakukan ini ...

var element = cart.find(function (el) { return el.id === "id_that_we_want";});

Letakkan variabel di "id_that_we_want" dan berikan id elemen yang kita inginkan dari array kita. Objek "elemnt" dikembalikan. Tentu saja kita tidak perlu id kita untuk menemukan objek. Kami dapat menggunakan properti lain untuk melakukan pencarian.

Dave
sumber
1
 function addValueInObject(value, object, key) {

        var addMoreOptions = eval('{"'  + key + '":' +  value + '}');

        if(addMoreOptions != null) {
            var textObject = JSON.stringify(object);
            textObject = textObject.substring(1,textObject.length-1);
            var AddElement = JSON.stringify(addMoreOptions);
            object = eval('{' + textObject +','+  AddElement.substring(1,AddElement.length-1) + '}');
        }
        return object;
    }

addValueInObject('sdfasfas', yourObject, 'keyname');

ATAU:

var obj = {'key':'value'};

obj.key2 = 'value2';
Ivan Ferrer
sumber
Meskipun ini adalah cara untuk mencapai hasil yang sama, solusi ini tidak rapi.
warunapww
1

push adalah metode array, jadi untuk objek Anda bisa mendapatkan indeks elemen terakhir, dan Anda mungkin bisa melakukan pekerjaan yang sama dengan push untuk objek seperti di bawah ini

var lastIndex = Object.keys(element)[Object.keys(element).length-1];

kemudian tambahkan objek ke indeks elemen baru

element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
Ganesh
sumber
1

jika Anda tidak merancang untuk melakukan loop dengan di JS misalnya lulus ke PHP untuk melakukan loop untuk Anda

let decision = {}
decision[code+'#'+row] = event.target.value

konsep ini mungkin sedikit membantu


sumber
1

Ini adalah pertanyaan lama, toh hari ini praktik terbaik adalah dengan menggunakan Object.defineProperty

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode

console.log(object1.property1);
// expected output: 42
pengguna8271796
sumber