[英]javascript add object dynamically
我在以下代码中添加了两个评论(带有ID和NAME):
var data = {
SKU: 'CS4',
Name: 'Dell Laptop Inspiron 41',
Quantity: 1,
ItemPrice: 121,
"Reviews" : [
{
"ID": 2551,
"Name": 'john',
},
{
"ID": 255551,
"Name": 'j5ohn',
}
};
如何动态添加它们(我将使用ajax从其他站点获取评论数据)?
我尝试了这些代码,但我不知道为什么它不起作用,我完全迷路了。
var data = [{
SKU: 'CS4',
Name: 'Dell Laptop Inspiron 41',
Quantity: 1,
ItemPrice: 121,
}];
var total_reviews = 5;
for (i=1; i<=total_reviews; i++) {
Object.assign(data.Reviews, { "ID": data.from.other.sites.ID, "Name": data.from.other.sites.NAME });
}
您能告诉我我缺少哪一部分吗? 还是可以给我提示或代码让我开始?
data[0].Reviews = []
for (i=1; i<=total_reviews; i++) {
data[0].Reviews.push({ "ID": data.from.other.sites.ID, "Name": data.from.other.sites.NAME })
}
在示例输出中,对象的Reviews
属性是对象数组。 这个简单的代码应该可以帮助您做到这一点:
var data = [ { SKU: 'CS4', Name: 'Dell Laptop Inspiron 41', Quantity: 1, ItemPrice: 121 } ]; var total_reviews = 5; for (var i = 1; i <= total_reviews; i++) { // This doesn't work because you are trying to push it to an Array. // Object.assign(data.Reviews, { "ID": data.from.other.sites.ID, "Name": data.from.other.sites.NAME }); // First make sure that the array is initialized. data[0].Reviews = data[0].Reviews || []; // Then add the object to your array. data[0].Reviews.push({ "ID": "data.from.other.sites.ID", "NAME": "data.from.other.sites.NAME" }); }
这应该使您朝正确的方向前进:
if(!data.Reviews){
data.Reviews = []
}
review = {"ID": "someId", "Name": "someName"}
data.Reviews.push(review)
看来您的数据对象不是普通对象。 这是一个数组。
因此,如果要将新的评论添加到该数组的元素中,请按其键(唯一标识符)找到该元素,然后将新的评论推入元素的“评论”属性中。
const index = data.indexOf(element => element.id === id);
if (index !== -1) {
for (let i = 0; i < total_reviews; i++) {
data[index]['Reviews'].push({ "ID": data.from.other.sites.ID, "Name": data.from.other.sites.NAME };
}
}
请检查以下内容:
var data = { SKU: 'CS4', Name: 'Dell Laptop Inspiron 41', Quantity: 1, ItemPrice: 121, "Reviews" : [ { "ID": 2551, "Name": 'john', }, { "ID": 255551, "Name": 'j5ohn', }] }; var total_reviews = 5; for (i=1; i<=total_reviews; i++) { data.Reviews.push({ "ID": 'id_'+i, "Name": 'name_'+i }) } console.log(data.Reviews);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.