Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中创建混合对象数组_Javascript_Arrays - Fatal编程技术网

在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" }
]