Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
用各种php数组创建javascript数组的最有效方法_Javascript_Php_Jquery_Arrays - Fatal编程技术网

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

用各种php数组创建javascript数组的最有效方法,javascript,php,jquery,arrays,Javascript,Php,Jquery,Arrays,我有一个表单,用户可以多次提交,每次添加不同的信息 这些表单输入被转换为php$\u SESSION数组,因此每次用户点击提交按钮时,数组都会增长。这很好用 我需要将它们引入javascript,但我不确定构建数据集数组的最有效方法是什么 dateReceived = <?php echo json_encode($_SESSION['dateReceived']);?>; name = <?php echo json_encode($_SESSION['name ']);?&

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

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

我需要将它们引入javascript,但我不确定构建
数据集
数组的最有效方法是什么

dateReceived = <?php echo json_encode($_SESSION['dateReceived']);?>;
name = <?php echo json_encode($_SESSION['name ']);?>;
color = <?php echo json_encode($_SESSION['color ']);?>;
最有效的方法是什么?我尝试使用
dateReceived.length
在用户每次按下按钮的迭代中增加数组,但它只是写入最新的数据集,而不是增加数组:

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

如果有人能帮助解决我的for循环中的语法/逻辑问题,我会很高兴,但同时也会建议这是否是一种有效的方法。因此,您有3个数组,都具有相同的长度和一致的索引。我想情况总是这样

var dataSet = [];
dateReceived.map(function(item, index) {
  dataSet.push([item, color[index], name[index]);
});
现在,您正在向数据集数组追加一个数组!魔法

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

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

如果需要经常进行此更新,则需要在“更改”事件上使用前端代码注册一个事件侦听器。但这只能作为一次性解决方案。一旦设置了初始状态,您将只希望对新数据进行操作(否则您将反复迭代不断增长的数组)。在这种情况下,您需要跟踪最后使用的索引,或者丢弃尚未聚合的数据,以便只对新鲜、美味的数据进行操作

见: 约翰

试试这个:

var dataSet = [];


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

    dataSet.push(data);

  }
var数据集=[];
对于(i=0;i

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

根据您的情况,在服务器端执行此操作可能会更容易。如果您谈论的是一个用户表单,那么项目的数量可能足够少,以至于不会对您使用的方法产生明显的影响。所以我个人不会在这个阶段担心效率

<?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); ?>

变量数据集=

var数据集=我会使用javascript中的函数来完成这个任务。@adeneo,而这肯定比编写
dateReceived=
对于每个变量,它每次都会覆盖数据,因此我只是得到最后一次迭代。然后您更改循环以使用由以前的数组组成的新对象看起来您更新了原始数据-我更新了我的答案以反映这一点。非常感谢!使用
array.map
函数覆盖您下面发布的答案有什么好处?正如我在问题中所问的——我想以最有效的方式来做这件事(我也想学习更多关于使用javascript的知识……),所以我肯定会仔细阅读。我只是想知道使用这个答案是否比另一个答案有好处,因为另一个答案确实有效。这两个答案都有效-唯一的问题是,如果您要在这些阵列上不断执行相同的操作,这两个答案都无效。我更新了我的答案,提出了一些注意事项和您可能需要采取的下一步措施。您是对的,
在您的循环中,您只是在覆盖数据。我每次都用相同的php变量覆盖它,但是php变量会增长,因为它是一个会话变量,所以如果用户单击按钮5次,它会覆盖第一组数据5次,但它也会添加2/3/4和5。这感觉效率不高,但很有效。太好了-非常感谢您为回答这个问题所做的努力。我真的很感激,并将阅读这些附加功能。
<?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); ?>