我有一个用户可以多次提交的表单,每次都会添加不同的信息。
这些表单输入被转换为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循环中帮助解决语法/逻辑问题,我会很高兴,但也建议这首先是否是一种有效的方法。
答案 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); ?>