过去两个小时我一直在努力解决这个问题,但仍然找不到解决办法(也许我被封锁了!!)。
我将从结果/输出的外观开始,如下所示:
results = [
'result_1' => [
"col_1" => "asc",
"col_2" => "asc",
"col_3" => "asc"
]
];
到目前为止,我正在这样做:
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 } ?>
ls_settings[ls_report_name] = {
$.each(ls_sort_keys, function (key, value) {
console.log(key, value);
});
}
console.log(ls_sort_keys)
的结果是包含["col_1", "col_2", "col_3"]
的三个值的数组。
我在此行Uncaught SyntaxError: Unexpected token .
中收到以下错误$.each(ls_sort_keys, function (key, value)
,我的猜测是因为不允许这样的事情发生在那里。
话虽如此,我如何将结果转换为输出?输出显示为数组但可以是Javascript对象,因为它将存储在localStorage和AFAIK中,它不支持数组但只支持字符串。
答案 0 :(得分:1)
你的最终循环确实应该创建一个对象。但是开头{
将被解释为对象文字的开头,但随后你继续,好像它是代码块的开头。这是无效的语法。
相反,您可以使用Object.assign
,计算属性语法和扩展语法,如下所示:
ls_settings[ls_report_name] = Object.assign(
...ls_sort_keys.map(col => ({ [col]: "asc" }))
)
从PHP代码中删除演示:
var ls_sort_keys = [];
var ls_settings = {};
var ls_report_name = "report_1";
ls_sort_keys.push("col_1", "col_2", "col_3");
ls_settings[ls_report_name] = Object.assign(
...ls_sort_keys.map(col => ({ [col]: "asc" }))
)
console.log(ls_settings);
或者,如果您更喜欢更老式的语法:
var ls_sort_keys = [];
var ls_settings = {};
var ls_report_name = "report_1";
ls_sort_keys.push("col_1", "col_2", "col_3");
var obj = {};
for (var i = 0; i < ls_sort_keys.length; i++) {
obj[ls_sort_keys[i]] = "asc";
}
ls_settings[ls_report_name] = obj;
console.log(ls_settings);