【问题标题】:Javascript push object into multidimensional array loopJavascript将对象推入多维数组循环
【发布时间】:2017-01-16 18:50:39
【问题描述】:

我目前有这个多维数组:

var locations = [
    ['Event', 'Monday', 50.820250, -0.143534, 'Image', 'fa fa-heart'],
    ['Event 2', 'Tuesday', 50.819939, -0.140978, 'Image', 'fa fa-heart'], 
];

我有一个 JavaScript 文件:

$(function () 
  {
$.ajax({                                      
  url: 'locations.php', data: "", dataType: 'json', success: function(rows)        
  {
    for (var i in rows)
    {
      var row = rows[i];          

      var id = row.id;
      var name = row.name; 
      var date = row.date; 
      var lat = row.lat; 
      var long = row.long;
      var image = row.header;

    var test = "['" + name + "', '" + date + "', " + lat + ", " + long + ", '" + image + "', 'fa fa-heart'],";

    locations.push(test);

          } 

  } 
});

  async: false

});

它可以很好地从 PHP 文件中获取所有信息,但是我想为每个循环“推送”/添加一个新事件到当前数组中。

非常感谢任何帮助!

【问题讨论】:

  • test 是一个字符串,而不是一个数组。
  • 为什么使用数组作为locations的元素?它们看起来应该是对象。
  • @RyanBoyling 我要问...我注意到您只回复了一个答案,尽管您没有解决其他(看似更简洁)的答案。我自己为 Emmanuel 提供的解决方案是否有理由不会为您工作?我在答案中包含了一个示例,该示例似乎完全符合您的要求...
  • 我确实对您的两个答案都进行了尝试,非常感谢您的帮助!我对这一切还是很陌生,所以我很抱歉之前没有提到这一点。有很多代码我没有分享(为了让你更容易回答),所以我目前仍在努力开发它,你的代码虽然是一段完美的代码,但并不真正适合。 :-)
  • 排除代码只会让我们更难回答。您在此处获得的所有答案对于您提出的问题都是正确的。如果他们都没有解决您的具体问题,那么您要么没有提出正确的问题,要么没有包含足够的信息。感谢您的帮助,但您可以想象如果我问您“天空是什么颜色的?”会是什么样子?你说“蓝色”,我说“哦,实际上我决定不分享的问题还有很多,所以你的答案不起作用。”

标签: javascript arrays for-loop multidimensional-array


【解决方案1】:

您添加的是一个字符串,而不是一个数组。 应该是:

var test = [name, date, lat, long, image, 'fa fa-heart'];

为了确认,在将测试推入数组之前,打印类型。即

console.log(typeof test);

如果它是一个字符串,你会得到 'string' 作为输出;如果它是一个数组,你会得到'object'。

【讨论】:

    【解决方案2】:

    您将test 变量设置为一个长字符串,而不是一个实际的数组。要使其成为一个数组,您可以执行以下操作:

    var test = [name, date, lat, long, image,'fa fa-heart'];
    locations.push(test);
    

    示例:https://jsfiddle.net/ejqzshy5/

    【讨论】:

      【解决方案3】:

      您可以为每一行创建一个新数组,然后将每个项目推入该数组。最后,将这个新数组推送到您的 locations 数组中。

      这是 JSBin:http://jsbin.com/zumijib/edit?html,css,js,output

      for (var i = 0, rowLength = rows.length; i < rowLength; i++) {
        var row = rows[i];
        // create new array
        var newData = [];
      
        // add new data to end of list.
        newData.push(row.name);
        newData.push(row.date);
        newData.push(row.lat);
        newData.push(row.long);
        newData.push(row.image);
        newData.push('fa fa-heart');
      
        // add data to current list of locations.
        locations.push(newData);
      }
      

      【讨论】:

      • 感谢回复和代码!它似乎没有将其作为数组推送,而是作为字符串推送。我只是真的需要变量“位置”以 ['Event', 'Monday', 50.820250, -0.143534, 'Image', 'fa fa-heart'],['Event 2', 'Monday', 50.820250, -0.143534, 'Image', 'fa fa-heart'],['Event 3', 'Monday', 50.820250, -0.143534, 'Image', 'fa fa-heart'] 等结尾。
      • 你能帮我console.log()传入的行数据吗?这应该可行,我们正在创建一个新数组来保存数据,将数据添加到数组中,然后将这个新数组添加到 locations 数组中。它应该是一个数组而不是一个字符串。它适用于我添加到 JSBin 的模拟数据:jsbin.com/zumijib/4/edit?js,console
      • 啊,是的,我看到它正在工作。然而,我刚刚遇到了另一个问题.. 这个文件被加载到一个不同的 js 文件中,然后将位置数组分开。我认为我的问题是我们正在创建位置数组但没有显示最终变量。我怎么可能在代码末尾显示 var locations = [[stuff]];
      • 文件是如何分离的?比如,您是否使用 IIFE/模块模式使您的代码不在全局范围内?如果是这样,那么您可以导出位置数组。否则,要共享位于这样两个不同脚本中的代码,您必须在全局范围内拥有一些东西,就像在其他脚本中一样:window.APP = window.APP || {};window.APP.data = {};,然后是window.APP.data.locations = [...];。这将为您提供一个有点离散的全局变量,然后您可以将您的 newData 数组推送到 window.APP.data.locations
      • 啊,太好了,我们到了某个地方!我目前正在使用$.getScript("js/locations.js", function(){ 加载该js 文件,但它仍然没有抓取window.APP.data。有什么想法吗?
      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 2018-01-09
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多