在Javascript中创建混合对象数组
我正在尝试创建一个这样的数组:在Javascript中创建混合对象数组,javascript,arrays,Javascript,Arrays,我正在尝试创建一个这样的数组: ["Apple",{1: "Pie", 2: "Dumpling", 3: "Cider"}, "Banana", {1: "Bread", 2: "Republic"}] 从以下内容的数组开始: ["Apple", "Banana"] // <input id="Apple"... data-makes="Pie,Dumpling,Cider"> // <input id="Banana" ... data-makes="Bread,Re
["Apple",{1: "Pie", 2: "Dumpling", 3: "Cider"}, "Banana", {1: "Bread", 2: "Republic"}]
从以下内容的数组开始:
["Apple", "Banana"]
// <input id="Apple"... data-makes="Pie,Dumpling,Cider">
// <input id="Banana" ... data-makes="Bread,Republic"
var output = [];
var fruits = ["Apple", "Banana"];
for (i=0; i < fruits.length; ++i)
{
members = document.getElementById(fruits[i]).getAttribute("data-makes");
tmp = members.split(",");
for (k=0; k < tmp.length; ++k)
{
output[i][k+1] = tmp[k];
}
}
[“苹果”、“香蕉”]
//
//试试这个:
var fruits = ["Apple", "Banana"], i, k, members, tmp, output = [];
var final = [];
for (i=0; i < fruits.length; ++i)
{
members = document.getElementById(fruits[i]).getAttribute("data-makes");
tmp = members.split(",");
output[i] = new Object();
for (k=0; k < tmp.length; ++k)
{
output[i][k+1] = tmp[k];
}
final.push(fruits[i])
final.push(output[i])
}
console.log(final);
var-fruits=[“苹果”、“香蕉”]、i、k、成员、tmp、输出=[];
var final=[];
对于(i=0;i<0.length;++i)
{
members=document.getElementById(fruits[i]).getAttribute(“数据生成”);
tmp=成员。拆分(“,”);
输出[i]=新对象();
对于(k=0;k
您可能想试试这样的方法。您必须替换硬编码的元素
var fruits=[“苹果”、“香蕉”];
var tempString=“馅饼、饺子、苹果酒”;
var tempArray=新数组();
tempArray.push(tempString);
tempString=“面包,共和国”;
tempArray.push(tempString);
var输出={};
对于(变量i=0;i 日志(输出[“香蕉”][“0”])代码>首先,记住JSON键总是字符串——不是整数
["Apple", "Banana"]
// data-makes="Pie,Dumpling,Cider", data-makes="Bread,Republic"
var output = [];
var type;
var fruits = ["Apple", "Banana"];
for (i=0; i < fruits.length; ++i)
{
members = document.getElementById(fruits[i]).getAttribute("data-makes");
tmp = members.split(",");
for (k=0; k < tmp.length; ++k)
{
type = {}
type[fruits[i]] = {}
type[fruits[i]][k] = tmp[k]
output.push(type);
}
}
与您要求的不完全一样(我无法想象使用一维数组来实现这一点,但您可以理解这一点)您的代码中有两个问题:
首先,您永远不会将水果[i]
放入输出
数组
第二,在将output[i]
初始化为数组或对象之前,不能将其分配给output[i][k+1]
for (i=0; i < fruits.length; ++i)
{
output.push(fruits[i]);
var members = document.getElementById(fruits[i]).getAttribute("data-makes");
var tmp = members.split(",");
var obj = {};
for (k=0; k < tmp.length; ++k)
{
obj[k+1] = tmp[k];
}
output.push(obj);
}
for(i=0;i
这是一种在将来可能会有用的替代方法
// loop over the fruits
var arr = fruits.reduce(function (fp, fc) {
// get the string (in your example the data-makes value)
// and add each to a new object
var temp = makes[fc].split(', ').reduce(function (p, c, i) {
p[i + 1] = c;
return p;
}, {});
// then concatenate the fruit name and its object to
// the output array
return fp.concat.apply(fp, [fc, temp]);
}, []);
输出
[
"Apple", { "1": "pie", "2": "dumpling", "3": "cider"},
"Banana", { "1": "bread", "2": "Republic" }
]
您可以为带有数据的元素添加HTML吗?Andy同样,所需的数组是一维的,但OP正在创建一个二维数组输出[i][k+1]=tmp[k]代码>结果不应该更像这样:[“苹果”,“馅饼”,“饺子”,“苹果酒”,“香蕉”,“面包”,“共和国]]它应该更像=>{“苹果”:[“馅饼”,“饺子”,“苹果酒],“香蕉”:[“面包”,“共和国]}万岁!Chrome开发者工具用户!;)看起来不错。我自己永远也不会想出那个语法。您的示例输出与我在控制台中手工制作的数据对象完全相同!我将这样编写我的实际代码,然后返回并将其标记为正确。谢谢
[
"Apple", { "1": "pie", "2": "dumpling", "3": "cider"},
"Banana", { "1": "bread", "2": "Republic" }
]