如何从单个数组创建多维数组或对象?

时间:2018-05-17 14:40:15

标签: javascript jquery arrays

过去两个小时我一直在努力解决这个问题,但仍然找不到解决办法(也许我被封锁了!!)。

我将从结果/输出的外观开始,如下所示:

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中,它不支持数组但只支持字符串。

1 个答案:

答案 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);