从各种php数组创建javascript数组的最有效方法

时间:2015-06-22 18:35:05

标签: javascript php jquery arrays

我有一个用户可以多次提交的表单,每次都会添加不同的信息。

这些表单输入被转换为php $_SESSION数组,因此每次用户点击提交按钮时,数组都会增长。这很好。

我需要将这些内容添加到javascript中,但我不确定构建dataSet数组的最有效方法是什么。

dateReceived = <?php echo json_encode($_SESSION['dateReceived']);?>;
name = <?php echo json_encode($_SESSION['name ']);?>;
color = <?php echo json_encode($_SESSION['color ']);?>;

这些变量中的每一个都是相同的长度(例如 - 用户第一次按下按钮时它们的长度都是1,那么它将是2,等等......)所以我需要创建一个数组在javascript中看起来像这样:

dataSet = [
  [dateReceived[0],name[0],color[0]],
  [dateReceived[1],name[1],color[1]],
  etc...
  ];

最有效的方法是什么?我尝试使用dateReceived.length在用户按下按钮的每次迭代时增长数组,但它只是编写最新的数据集而不是增长数组:

for (i = 0; i < dateReceived.length; i++ ) {
  dataSet = [
    [dateReceived[i],name[i],color[i]],
  ]
}

如果有人可以在我的for循环中帮助解决语法/逻辑问题,我会很高兴,但也建议这首先是否是一种有效的方法。

3 个答案:

答案 0 :(得分:1)

所以你有3个数组,所有数组都具有相同的长度和一致的索引。我会假设情况永远如此。

var dataSet = [];
dateReceived.map(function(item, index) {
  dataSet.push([item, color[index], name[index]);
});

现在您要向dataSet数组追加一个数组!魔术!

这里的问题是JS Arrays是指针,而不是内存中切片的文字表示。在您的循环中,您只需覆盖您的数据。

此外,JavaScript有很多很棒的函数式编程实用程序(它可以说是一种函数式编程语言),所以我鼓励在适当的时候使用它们。

如果您需要经常更新此更新,则需要在“更改”事件中使用前端代码注册事件监听器。但这只能作为一次性解决方案。一旦你设置了初始状态,你就只想对新数据进行操作(否则你将一遍又一遍地迭代不断增长的数组)。在这种情况下,您需要跟踪最后使用的索引或丢弃尚未汇总的数据,这样您才能使用新鲜美味的数据。

请参阅:Array.map Array.push

答案 1 :(得分:1)

约翰,

试试这个:

var dataSet = [];


  for (i = 0; i < mfrPartNumber.length; i++ ) {
    data = [dateReceived[i],name[i],color[i]];

    dataSet.push(data);

  }

这将在[i]的每个实例中构建一个数组,并随着用户不断按下按钮而不断增长。

答案 2 :(得分:0)

根据您的情况,服务器端可能更容易。如果您正在谈论用户表单,那么项目数量可能会足够低,以至于您使用的方法不会产生显着差异。所以我个人不会担心现阶段的效率。

<?php

$date_list = $_SESSION['dateReceived'];
$name_list = $_SESSION['name '];
$color_list = $_SESSION['color '];

$my_data = array();
for ($index = 0; $index < count($date_list); $index++) {
    $my_data[] = array($date_list[$index], $name_list[$index], $color_list[$index]);
}

?>
var dataSet = <?php echo json_encode($my_data, true); ?>