Добавление элементов в объект

Мне нужно заполнить json файл, теперь у меня есть что-то вроде этого:

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

И мне нужно добавить еще один "элемент". Мой первый шаг заключается в том, чтобы положить json в тип объекта с помощью cart = JSON.parse, теперь мне нужно добавить новый элемент. Я предположил, что должен использовать cart.push для добавления другого элемента, я пробовал это:

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

Но у меня element.push ошибка: "Объект не имеет метода push", когда я пытаюсь сделать element.push, и я думаю, что я делаю что-то ОЧЕНЬ неправильно, потому что я нигде не говорю "элемент".

Как я могу это сделать?

Редактировать: извините, у меня было много путаницы в моей голове.

Я думал, что могу получить только тип объекта, когда беру данные из JSON.parse, но я получаю то, что я поставил в JSON в первую очередь.

Помещение массива вместо объекта решает мою проблему, я использовал множество предложений, полученных здесь, спасибо вам всем!

Ответ 1

Ваш элемент не является массивом, однако ваша корзина должна быть массивом для поддержки многих объектов элемента. Пример кода:

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

Если вы хотите, чтобы корзина была массивом объектов в форме { element: { id: 10, quantity: 1} } выполните:

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

JSON.stringify() упоминается как проблема в комментарии:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 

Ответ 2

С этой строкой

var element = {};

вы определяете element как простой объект. Нативный JavaScript-объект не имеет метода push(). Чтобы добавить новые элементы к простому объекту, используйте этот синтаксис:

element[ yourKey ] = yourValue;

С другой стороны, вы можете определить element как массив, используя

var element = [];

Затем вы можете добавлять элементы, используя push().

Ответ 3

Если корзина должна храниться как объект, а не массив (хотя я бы рекомендовал хранить в качестве []), вы всегда можете изменить структуру, чтобы использовать идентификатор в качестве ключа:

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

Это позволяет добавлять в корзину несколько предметов, например:

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

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }

Ответ 4

Для добавления к объекту используйте Object.assign

var ElementList ={}

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

Выход:

{ "Элемент": { "ID": 10, "количество": 1}, "элемент": { "ID": 11, "количество": 2}}

Ответ 5

вы должны написать var element = [];
в javascript {} - пустой объект, а [] - пустой массив.

Ответ 6

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

Ответ 7

Попробуй это:

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);

Ответ 8

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;
}

этот код работает.

Ответ 9

Если кто-то приходит к созданию аналогичного JSON, просто без использования cart в качестве массива, здесь идет:

У меня есть массив объектов myArr as:

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

и я попытаюсь создать JSON со следующей структурой:

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

вы можете просто do-

var cart = {};
myArr.map(function(myObj){
                    cart[myObj.id]= myObj;
                    });

Ответ 10

Для тех, кто все еще ищет решение, я думаю, что объекты должны храниться в массиве вроде...

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

Затем, когда вы хотите использовать элемент как объект, вы можете это сделать...

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

Поместите переменную в "id_that_we_want" и дайте ей идентификатор элемента, который мы хотим от нашего массива. Возвращается объект "elemnt". Конечно, нам не нужен идентификатор, чтобы найти объект. Мы могли бы использовать любое другое свойство для поиска.

Ответ 11

 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');

ИЛИ:

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

obj.key2 = 'value2';

Ответ 12

push - это метод массивов, поэтому для объекта вы можете получить индекс последнего элемента, и вы, вероятно, можете выполнить ту же работу, что и для объекта, как показано ниже

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

затем добавить объект к новому индексу элемента

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

Ответ 13

если вы не планируете делать цикл в JS, например, переходите к PHP, чтобы сделать цикл для вас

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

эта концепция может немного помочь

Ответ 14

Я читал что-то, связанное с этой попыткой, если это полезно.

1. Определите функцию push внутри объекта.

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

Теперь вы можете выдвигать элементы как массив

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

Это создаст этот объект

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

Обратите внимание, что элементы добавляются с индексами, а также видно, что к объекту добавлено новое свойство длины. Это также будет полезно для определения длины объекта. Это работает из-за общего характера функции push()