将元素添加到对象
我需要填充一个json文件,现在我有这样的东西:
{"element":{"id":10,"quantity":1}}
而且我需要添加另一个“元素”。 我的第一步是把这个JSON放在一个Objecttypes中使用cart = JSON.parse
,现在我需要添加新的元素。 我想我必须使用cart.push
添加另一个元素,我试过这个:
var element = {}; element.push({ id: id, quantity: quantity }); cart.push(element);
但是当我尝试使用element.push
,我得到了错误“Object has no method push”,我想我正在做一些非常错误的事情,因为我没有告诉任何地方的“元素”。
我怎样才能做到这一点?
编辑:对不起,我头脑中有很多混乱。
我认为从JSON.parse
获取数据的时候只能得到对象types,但是我首先得到了我放入JSON的东西。
把数组而不是对象解决了我的问题,我也使用了很多的build议,谢谢大家!
您的元素不是数组,但是您的购物车需要是一个数组才能支持多个元素对象。 代码示例:
var element = {}, cart = []; element.id = id; element.quantity = quantity; cart.push(element);
如果您希望购物车是{ element: { id: 10, quantity: 1} }
forms的对象数组,请执行:
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}]"
那一排
var element = {};
你定义的element
是一个普通的对象。 原生JavaScript对象没有push()
方法。 要将新项目添加到普通对象,请使用以下语法:
element[ yourKey ] = yourValue;
另一方面,你可以定义element
作为一个数组使用
var element = [];
然后你可以使用push()
来添加元素。
如果购物车必须作为一个对象存储,而不是数组(尽pipe我build议存储为[]],您可以随时更改结构以使用ID作为键:
var element = { quantity: quantity }; cart[id] = element;
这允许您添加多个项目到购物车,如下所示:
cart["1"] = { quantity: 5}; cart["2"] = { quantity: 10}; // Cart is now: // { "1": { quantity: 5 }, "2": { quantity: 10 } }
你应该写var element = [];
在JavaScript {}
是一个空对象, []
是一个空数组。
尝试这个:
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);
cart.push({"element":{ id: id, quantity: quantity }});
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';
如果有人正在寻找创build一个类似的JSON,只是没有使用cart
作为数组,这里是:
我有一个对象myArr
数组为:
var myArr = [{resourceType:"myRT", id: 1, value:"ha"}, {resourceType:"myRT", id: 2, value:"he"}, {resourceType:"myRT", id: 3, value:"Li"}];
我将尝试使用以下结构创buildJSON:
{ "1":{"resourceType":"myRT","id":"1","value":"ha"}, "2":{"resourceType":"myRT","id":"2","value":"he"}, "3":{"resourceType":"myRT","id":"3","value":"Li"} }
你可以简单地做 –
var cart = {}; myArr.map(function(myObj){ cart[myObj.id]= myObj; });
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; }
这个代码工作。
push是数组的一种方法,所以对于对象,你可以得到最后一个元素的索引,你可以像下面那样做对象的push工作
var lastIndex = Object.keys(element)[Object.keys(element).length-1];
然后将对象添加到元素的新索引
element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
如果你没有devise在JS中做循环例如传递给PHP为你做循环
let decision = {} decision[code+'#'+row] = event.target.value
这个概念可能会有所帮助