【发布时间】:2016-02-20 21:05:53
【问题描述】:
很抱歉有类似的主题,但我无法解决这个问题。我有一个 JSON 对象,其中包含键和值(表示文件 ID 和文件名)。由于 JS 对象无法排序,我需要转换为数组,按值(即文件名)排序,而不是按键(即文件 ID)排序。我可以完成所有这一切,除非在转换为数组时,我丢失了我的键/文件 ID(例如,110、111、112)并且它们被替换为默认的数组键(0、1、2 等)。
// Assign object to a var
$obj_win_top_get_files = window.top.<?php echo $_GET['files']; ?>;
通过console.log查看对象,
console.log('checked_boxes', $obj_win_top_get_files);
我明白了:
对象{110:“013_904_general.docx”,111:“013_902_info.docx”,112:“013_120_list.docx”}
// Sort JSON object by file name ("value") rather than by id ("key")
// Create an array first since JS object is NOT sortable
arr_ids_filenames = new Array();
// Loop thru JS object to populate new array so it can be subsequently sorted
$.each($obj_win_top_get_files, function (key, value) {
console.log(key, value);
// Populate array
arr_ids_filenames[key] = value;
});
// Sort array by values
arr_ids_filenames.sort();
// THIS IS WHERE I AM LOSING THE FILE IDs (keys)
$.each(arr_ids_filenames, function (key, value) {
// Array may contain keys/IDs with no values/file names so make sure there is a value
if(value){
console.log(key, value);
$the_ul.append('<li id="chk_file_' + key + '">' + value + '</li>');
}
});
一切正常,除了它们的键不是文件 ID (110,111,112),它们是默认的数组键 (0,1,2)。这是 $.each() 中我做的不正确的东西。我很接近,但无法解决这个问题。任何建议将不胜感激。
【问题讨论】:
-
在没有任何完整性检查的情况下打印
$_GET['files']是一个非常糟糕的主意。 XSS、CSRF 等 -
如您所说,您无法对对象进行排序。如果在 PHP 中将其设为包含对象的数组,则可以使用
Array.sort在 JS 中的子属性上对其进行排序 -
感谢 Rudie 的反馈。 GET var 是通过 AJAX 从我的其他页面之一发送的。
-
你不知道 GET 变量是如何被发送的,这就是黑客的问题,他们不会做你想做的事。如果您的网站有会话/cookie,它们将被劫持。打印时总是 html/js 对所有内容进行编码。永远不要相信输入。
标签: javascript arrays json sorting object