Javascript 推进阵列

Javascript 推进阵列,javascript,arrays,array-push,Javascript,Arrays,Array Push,我需要遍历数组和数组中具有额外值的每个数组,将它们作为单独的项推送到其父数组。我希望这是有道理的 这是我的初始数组的结构: {type: [ 0: value: "tomato" ], [ 1: {value: "apple", [ extras: [ 0: { value: "green" } ], [ 1: { value: "red" } ] ] ],

我需要遍历数组和数组中具有额外值的每个数组,将它们作为单独的项推送到其父数组。我希望这是有道理的

这是我的初始数组的结构:

{type:
    [ 0:
        value: "tomato"
    ],
    [ 1:
        {value: "apple",
        [ extras:
           [ 0: { value: "green" } ],
           [ 1: { value: "red" } ]
        ]
    ],
    [ 2:
        value: "pineapple"
    ]
}
[type:
    [ 0:
        tomato
    ],
    [ 1:
        apple,
        green,
        red
    ],
    [ 2:
        pineapple
    ]
]

结果应该是什么样子:

{type:
    [ 0:
        value: "tomato"
    ],
    [ 1:
        {value: "apple",
        [ extras:
           [ 0: { value: "green" } ],
           [ 1: { value: "red" } ]
        ]
    ],
    [ 2:
        value: "pineapple"
    ]
}
[type:
    [ 0:
        tomato
    ],
    [ 1:
        apple,
        green,
        red
    ],
    [ 2:
        pineapple
    ]
]

我尝试过但失败的地方:(我还评论了我在右行看到的错误)

var-response=/*第一个有问题的代码块的json是来自ajax的响应*/;
var items=JSON.parse(响应);
var type=Object.key(items)[0];
var myArray=[]
变量计数=项目[类型]。长度;
//循环浏览“类型”中的主要项目
对于(i=0;i

我不理解的主要问题,这似乎也是我示例中的问题:

如果声明空数组,如何:

  • 是否将项目推送到该数组,并在该项目周围声明一个新数组
  • 将另一个项目推送到围绕第一个项目创建的阵列中
    • 您的问题在于:

       var value = items[type][i][value]; 
      
      你应该把它改成

       var value = items[type][i].value; 
      

      这就是我相信你想要的。以下代码可能不正确,因为我近似于我认为您的
      项所包含的内容

      var items = {
          type: [
              {
                  value: "tomato"
              },
              {
                  value: "apple",
                  extras: [
                      {
                          value: "green"
                      }, {
                          value: "red"
                      }
                  ]
              },
              {
                  value: "pineapple"
              }
          ]
      };
      var myArray = {
          type: []
      };
      
      
      var count = items['type'].length;
      
      //Loop through main items in "type"
      for (i = 0; i < count; i++) {
      
          var subarray = [];
          subarray.push(items['type'][i]['value']);
      
          if (items['type'][i]['extras']) {
              var extracount = items['type'][i]['extras'].length;
              //Loop through extras
              for (k = 0; k < extracount; k++) {
      
                  var extra = items['type'][i]['extras'][k]['value'];
                  subarray.push(extra);
              }
          }
          myArray['type'].push(subarray);
      }
      
      var项目={
      类型:[
      {
      价值:“西红柿”
      },
      {
      价值:“苹果”,
      额外费用:[
      {
      价值:“绿色”
      }, {
      值:“红色”
      }
      ]
      },
      {
      价值:“菠萝”
      }
      ]
      };
      var myArray={
      类型:[]
      };
      变量计数=项目['type']。长度;
      //循环浏览“类型”中的主要项目
      对于(i=0;i
      一些注意事项:

      您肯定需要了解javascript中数组和对象之间的区别。网上有很多关于这方面的资源

      从对象
      obj
      检索/操作属性
      prop
      时(即对于键值对),需要使用
      obj.prop
      obj['prop']
      。请注意后一个示例中使用的字符串


      对于数组
      arr
      ,应该使用
      arr.push(value)
      将新值推送到数组上。

      不,这没有任何意义。在执行此操作之前,您应该阅读更多有关javascript对象和数组的信息。有人可以为您编写代码,但您不会从中学到任何东西。你的数组完全错了。无论如何,你应该解释一下预期的结果behavior@Frondor我不同意,我会从中学到很多。。我做了我的研究,但我没有找到任何关于这个问题的好参考<代码>myArray[类型]=[值]工作正常,但
      myArray[type][i]=[value]不。。与
      push()
      相同。不能将索引添加到JavaScript数组中。出于这些目的使用对象,但正如@Frondor所说,在做任何事情之前,都要学习和阅读更多关于JavaScript的知识。是的,您正在尝试使用和创建关联数组,这些数组只是JavaScript中具有命名属性的对象。如果您需要关联数组,则必须使用对象,Javascript数组仅限于数字顺序键和值。感谢您的回答。我通常知道这两者之间的区别,但当object包含多个包含数组和对象等的数组时,它会变得复杂。然后它会混淆选择的外观以及何时使用
      push()
      或其他方法。调试变量的快速方法是在开发人员工具(或浏览器的等效工具)中的代码中创建断点,或使用
      控制台.log(项)
      。您将能够查看变量的内容,并确定每个元素的类型(本例中为数组或对象)。