Javascript 向对象添加元素
我需要填充一个json文件,现在我有如下内容:Javascript 向对象添加元素,javascript,json,object,Javascript,Json,Object,我需要填充一个json文件,现在我有如下内容: {"element":{"id":10,"quantity":1}} 我需要添加另一个“元素”。我的第一步是使用cart=json.parse将json放入对象类型,现在我需要添加新元素。 我想我必须使用cart.push来添加另一个元素,我尝试了以下方法: var element = {}; element.push({ id: id, quantity: quantity }); cart.push(element); 但是当我尝试执行el
{"element":{"id":10,"quantity":1}}
我需要添加另一个“元素”。我的第一步是使用cart=json.parse将json放入对象类型,现在我需要添加新元素。
我想我必须使用cart.push来添加另一个元素,我尝试了以下方法:
var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);
但是当我尝试执行element.push
时,出现了错误“objecthasnotmethodpush”,我认为我做了一些非常错误的事情,因为我没有告诉“element”任何地方
我该怎么做
编辑:对不起,我脑子里有很多困惑
我以为从JSON.parse
获取数据时只能得到对象类型,但我首先得到的是放在JSON中的内容
用数组代替对象解决了我的问题,我也用了这里的很多建议,谢谢大家 您应该编写var元素=[]代码>
在javascript中,{}
是一个空对象,[]
是一个空数组。您的元素不是数组,但是您的购物车需要是数组才能支持许多元素对象。代码示例:
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}]"
那一排
var element = {};
将元素
定义为普通对象。本机JavaScript对象没有push()
方法。要向普通对象添加新项,请使用以下语法:
element[ yourKey ] = yourValue;
另一方面,您可以使用
var element = [];
然后,您可以使用push()
添加元素如果购物车必须存储为对象而不是数组(尽管我建议存储为[]),您可以始终更改结构以使用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 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);
如果有人想要创建类似的JSON,而不使用cart
作为数组,那么下面是:
我有一个对象数组myArr
如下:
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;
});
这段代码已经运行。push是数组的一种方法,因此对于object,您可以获得最后一个元素的索引,并且您可能可以执行与push for object相同的工作,如下所示
var lastIndex = Object.keys(element)[Object.keys(element).length-1];
然后将对象添加到元素的新索引中
element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
如果您在JS中没有设计to-do循环,例如,将其传递给PHP,以便为您执行循环
let decision = {}
decision[code+'#'+row] = event.target.value
这个概念可能会对仍在寻找解决方案的任何人有所帮助,我认为对象应该存储在一个数组中,如
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”处,并将我们想要从数组中得到的元素的id给它。返回一个“elemnt”对象。当然,我们不必用我们的id来找到这个物体。我们可以使用任何其他属性进行查找。要附加到对象,请使用对象。分配
var ElementList={}
函数补遗(元素列表,元素){
让newList=Object.assign(ElementList,element)
返回新列表
}
console.log(元素列表)
输出:
{“元素”:{“id”:10,“数量”:1},“元素”:{“id”:11,“数量”:2}
我在读一些与这次尝试相关的东西,如果它有用的话
1.在对象内部定义推送功能
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()
function的通用性,这是一个老问题,无论如何,今天的最佳实践是使用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
将新的键/对元素添加到原始对象中
:
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"] }
我的建议是使用其他答案中已经提出的不同数据结构-它允许您在card.elements上进行推送,并允许扩展卡属性:
let card={
要素:[
{“id”:10,“数量”:1}
],
//其他卡片字段,比如“所有者”之类的。。。
}
卡片.元素.推送({“id”:22,“数量”:3})
控制台日志(卡片)代码>如果其他人需要,我终于找到了添加对象或对象数组的好方法:
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
}
]
});
谢谢,但是我的购物车现在不是一个数组,我不能做cart.push:(我需要一个对象来使用JSON.stringify(购物车)operation@HypeZ若cart是一个对象数组,您仍然可以对其进行字符串化。再次感谢!但我的基本数据是对象类型,因为“cart=JSON.parse(jsonfile)”在开始时..我不认为我应该将json作为一个对象,将其转换为数组,添加元素,字符串化..出于某种原因,我的对象只填充了最后一个元素。例如,我有4个不同的项,但在一个对象中,所有4个元素都是=我找到的最后一个值解决方案是创建元素={};内部为,则为其工作properly@GorodeckijDimitrij如果重复使用同一个元素对象,并用新值重新填充它的键,那么您将修改同一个元素实例,一次又一次地将其推入数组。只需为要添加的每个元素使用一个新元素对象,这就是您在for循环的作用域。无法执行cart.push,因为cart现在是一个对象!:(为什么它是一个对象而不是数组?因为我是从“cart=JSON.parse(jsonfile)”获得它的,它会给出一个object谢谢,但我的cart需要是一个对象而不是数组:(使用这样的对象的一个原因是,如果您需要删除项目。从对象中删除键比从数组中删除键容易得多。如果HypeZ的数组注释让任何人感到不舒服,Craig的回答不会添加数组,则使用括号[]
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
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 })
{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
}
]
});