【发布时间】:2016-04-09 08:58:43
【问题描述】:
我无法按照我希望的方式组织这些数据。在我的页面上,发生了一些我知道有效的事情......
- 一些 PHP 输出一个多维关联数组。这个数组的顶层是一个区域数组。每个区域都是一组时区。
- 更多 PHP 创建了第二个多维关联数组。这个数组的顶层是一个区域数组。每个区域都是一组 UTC 偏移量。
- 两个数组都是从相同的数据以相同的顺序生成的。这意味着
$offsets["region"][0]将基于与$timezones["region"][0]相同的时区。 - 两个数组都编码为 JSON 并传递给我的 JavaScript。
我有以下 JavaScript 代码...
var tempCurrentTimezoneArray = timezoneArray[ $("select[name='region_selector']").val() ];
var tempCurrentOffsetArray = timezoneOffsetArray[ $("select[name='region_selector']").val() ];
var groupedTimezones = {};
var groupedOffsets = {};
for (counter = 0; counter < tempCurrentOffsetArray.length; counter++) {
significantOffset = tempCurrentOffsetArray[counter].substr(tempCurrentOffsetArray[counter].length - 2);
if (!(significantOffset in groupedTimezones)) {
groupedTimezones[significantOffset] = [];
groupedOffsets[significantOffset] = [];
}
groupedTimezones[significantOffset].push(tempCurrentTimezoneArray[counter]);
groupedOffsets[significantOffset].push(tempCurrentOffsetArray[counter]);
}
var offsetArray = [];
for (var property in groupedTimezones) {
if (!groupedTimezones.hasOwnProperty(property)) {
continue;
}
groupedTimezones[property].sort();
groupedOffsets[property].sort();
offsetArray.push(parseInt(property));
}
offsetArray.sort();
var currentTimezoneArray = [];
var currentOffsetArray = [];
for (counter = 0; counter < offsetArray.length; counter++) {
currentTimezoneArray = currentTimezoneArray.concat(groupedTimezones[offsetArray[counter]]);
currentOffsetArray = currentOffsetArray.concat(groupedOffsets[offsetArray[counter]]);
}
在前两行中,我删除了与页面上所选区域无关的所有时区数据。这意味着我剩下 2 个一维数组。任一数组的任何给定索引都直接与另一个数组相关。即……
tempCurrentOffsetArray[0] 是在tempCurrentTimezoneArray[0] 找到的时区的UTC 偏移量。
此代码的其余部分旨在完成以下任务...
- 按其 UTC 偏移量对时区和偏移量进行分组。
- 按字母顺序组织每个偏移组。
- 创建两个数组,其中值首先按 UTC 偏移量排列,其次按字母顺序排列。
我遇到的问题是,在某些地区我收到了几乎完美的列表,而在其他地区我收到了一些看似随机数量的未定义值的列表,我不知道为什么。任何人都可以识别我的代码中的语法或逻辑错误吗?
tempCurrentTimezoneArray 输入数据 here 的 JSON
tempCurrentOffsetArray 输入数据的 JSON here
【问题讨论】:
-
请添加一些数据示例。
-
@NinaScholz 添加了指向传递给此脚本的实际数据的 JSON 编码版本的链接。
-
我使用示例数据运行了您的代码,但在结果数组中看不到任何未定义的值。我可以看到一个可能的错误映射,其中处理了 0.5 的偏移量,但就是这样。您能否准确指定您看到未定义值的偏移量或区域?
标签: javascript arrays sorting multidimensional-array