我需要填充一个json文件,现在我有这样的东西:
{"element":{"id":10,"quantity":1}}
我需要添加另一个“元素”。我的第一步是使用cart = json将该json放入Object类型中。解析,现在我需要添加新的元素。
我想我必须使用手推车。push添加另一个元素,我尝试了这个:
var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);
但是当我尝试做元素时,我得到了错误“对象没有方法推”。push,我认为我做了一些非常错误的事情,因为我没有告诉“元素”的任何地方。
我该怎么做呢?
编辑:对不起,我的脑子里有很多混乱。
我认为我只能从JSON中获取数据时的对象类型。解析,但我得到了我放在JSON的第一个地方。
用数组代替对象解决了我的问题,我用了很多建议,谢谢大家!
你的元素不是一个数组,但是你的购物车需要是一个数组以支持许多元素对象。代码示例:
var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);
如果你希望cart是一个对象数组,格式为{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}]"
下面的代码行将element定义为普通对象。
let element = {}
这种带有{}的JavaScript对象没有push()方法。要像这样向对象添加新项,使用以下语法:
element[yourKey] = yourValue
把它们放在一起,请看下面的例子:
Let element ={} //创建一个空对象
/*——向对象中添加东西——*/
Element ['active'] = true // 'active'是键,'true'是值
console.log(element) //期望结果-> {type: true}
Element ['state'] = 'slow' // 'state'是键,'slow'是值
console.log(element) //预期结果-> {type: true, state: 'slow'}
另一方面,如果你将对象定义为一个数组(即使用[]而不是{}),那么你可以使用push()方法添加新元素。
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');
OR:
var obj = {'key':'value'};
obj.key2 = 'value2';
如果有人想创建一个类似的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"}
}
你可以简单地做
var cart = {};
myArr.map(function(myObj){
cart[myObj.id]= myObj;
});
对于仍然在寻找解决方案的人来说,我认为对象应该存储在一个数组中,就像…
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”处放置一个变量,并将我们想从数组中获取的元素的id赋给它。返回一个“element”对象。当然,我们不需要使用id来查找对象。我们可以用任何其他的属性来寻找。
我正在阅读一些与此相关的东西,如果有用的话。
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
}
注意,元素添加了索引,还可以看到对象中添加了一个新的length属性。这对于计算物体的长度也很有用。这是因为push()函数的泛型性质
在原始对象中添加新的key/pair元素:
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 })
Obj新值:
{a: 1, b: 2, c: 3, d: 4, e: ['x', 'y', 'z'] }
为了防止其他人需要这个,我终于找到了一个添加对象或对象数组的好方法:
var myobj = {}
// These two options only work for single-valued keys, not arrays or objects
myobj["a"] = 1
myobj.b = 2
// This one works for everyting:
Object.assign(myobj, {"key": "value"}); // single-value
// Add object
Object.assign(myobj, {"subobj":
{
"c": 3
}
});
// Add array of objects
Object.assign(myobj, {"subarr":
[
{
"d": 4,
},
{
"e": 5
}
]
});