这个问题与javascript或jQuery有关,无论哪种方法都能更好地完成工作。
我想要做的是创建一个类似于以下内容的对象:
var prodItems = [
{
"product": "prod1",
"item": ["prod1Item1", "prod1Item2"]
},
{
"product": "prod2",
"item": ["prod2Item1", "prod2Item2", "prod2Item3", "prod2Item4"]
}
];
有了这个我可以访问这样的成员:
prodItems[1]["product"] is "prod2"
prodItems[1]["item"][0] is "prod2Item1"
我想动态创建这个列表,我对语法感到磕磕绊,比如:
var menuItems;
menuItems.product[0] = "prod1";
menuItems.product[0].item[0] = "prod1Item1";
有人可以就如何做到这一点给我一些指导吗?
编辑,我想创建一个类似
的函数returnDict("prod2", "prod2Item3")
这将重新排列它:
prodItems = [
{
"product": "prod2",
"item": ["prod2Item3", "prod2Item1", "prod2Item2", "prod2Item4"]
},
{
"product": "prod1",
"item": ["prod1Item1", "prod2Item2"]
}
];
答案 0 :(得分:2)
构建对象的“指导”是避免这种分别插入每个字符串的方式:
menuItems.product[0].product = "prod1";
menuItems.product[0].item[0] = "prod1Item1";
因为这涉及到大量反复编写相同的内容,这更容易出错并且可读性/可维护性较差。我更喜欢插入更粗粒度的对象:
menuItems.product[0] = {
product: "prod1",
item: ["prod1Item1"];
}
编辑:你的编辑提出了一个完全不同的问题,但听起来你想要做的是根据他们的“产品”属性对prodItems的元素进行排序,然后对内部的“items”数组做同样的事情。元件。
我认为最简单的方法是使用Array.sort()和自定义比较函数,该函数在您想要在顶部看到的元素上返回-1。这样的事情(匆匆写完和未经测试):
function returnDict(product, item) {
prodItems = prodItems.sort(function(a, b) {
if(a.product === product) {
return -1;
} else if(b.product === product) {
return 1;
} else {
return 0;
}
});
prodItems[0].items = prodItems[0].items.sort(function(a, b) {
if(a === item) {
return -1;
} else if(b === item) {
return 1;
} else {
return 0;
}
});
return prodItems;
}
答案 1 :(得分:2)
var menuItems = [];
menuItems.push({product:"prod1",item:[]})
menuItems[menuItems.length-1].item.push("product1Item1")
menuItems[menuItems.length-1].item.push("product1Item2")
menuItems.push({product:"prod2",item:[]})
menuItems[menuItems.length-1].item.push("product2Item1")
menuItems[menuItems.length-1].item.push("product2Item2")
menuItems[menuItems.length-1].item.push("product2Item3")
menuItems[menuItems.length-1].item.push("product2Item4")
答案 2 :(得分:1)
var prodItems = [
{
"product": "prod1",
"item": ["prod1Item1", "prod2Item2"]
},
{
"product": "prod2",
"item": ["prod2Item1", "prod2Item2", "prod2Item3", "prod2Item4"]
}
];
alert(prodItems[0].product);
for(var i = 0; i < prodItems.length; i++) {
alert(prodItems[i].product);
}
答案 3 :(得分:1)
我看到你的问题已得到解答,但我想建议一个小小的改进,以保持你的代码更干(不要重复自己)。您可以使用一个简单的函数,在添加新对象时可以节省一些额外的输入。
var prodItems=[];
function addProduct(productName, items){
var product={
product: productName,
items: items
};
prodItems.push(product);
};
//sample use
addProduct("prod2",["prod2Item3", "prod2Item1", "prod2Item2", "prod2Item4"])
如果您需要稍后更改对象结构,这肯定会变得更加灵活。