如何从一维数组生成多维数组或JavaScript对象?
嘿,我明白你卡在哪了——你在对象字面量里直接写$.each循环是语法错误,因为对象字面量只能包含键值对,不能直接执行代码逻辑。咱们一步步来解决这个问题:
错误原因解析
你原本的代码尝试在ls_settings[ls_report_name] = { ... }的大括号里直接写$.each,这不符合JS对象字面量的语法规则,所以浏览器抛出了Unexpected token .的错误。
修正后的实现代码
我们需要先创建一个空对象,通过循环填充键值对后,再把它赋值给目标属性:
var ls_sort_keys = []; var ls_settings = {}; var ls_report_name = "<?php echo $report_name ?>"; <?php foreach ($header_array as $key => $value) { ?> ls_sort_keys.push("<?php echo $value; ?>"); <?php } ?> // 初始化空的排序配置对象 var sortConfig = {}; // 遍历数组,给每个列名设置"asc"排序规则 $.each(ls_sort_keys, function (index, colName) { sortConfig[colName] = "asc"; }); // 将配置关联到对应的报告名称下 ls_settings[ls_report_name] = sortConfig; // 存储到localStorage(必须转成字符串) localStorage.setItem('reportSortSettings', JSON.stringify(ls_settings));
验证结果
当ls_report_name为result_1时,ls_settings的结构会和你期望的一致:
{ 'result_1': { "col_1": "asc", "col_2": "asc", "col_3": "asc" } }
关于localStorage的补充
你说得没错,localStorage仅支持存储字符串。所以存储时用JSON.stringify()把对象转为字符串,后续读取时可以用JSON.parse(localStorage.getItem('reportSortSettings'))将字符串转回JS对象。
内容的提问来源于stack exchange,提问作者ReynierPM
相关产品推荐
相关产品推荐

