访问javascript循环外的变量

时间:2017-01-17 05:56:23

标签: javascript sorting time utc

以下是我的代码。我正在使用UTC时间戳来正确排序数据,但希望在排序后转换为本地时间(最后2个注释行)。但是,如果我在排序之前进行转换,则结果不正确。如果我尝试在函数外部进行转换,则b.Timestamp没有上下文。

var myArray = [];

data.Items.forEach(function(b) {
    myArray.push(b.Timestamp + "text" + b.payload.value );
});

myArray.sort();

//var date = new Date(b.Timestamp + 'UTC');
//date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"

1 个答案:

答案 0 :(得分:0)

您必须在排序时保留原始数组,然后对其进行转换。您可以通过将自定义比较函数传递给.sort()来完成此操作。这是一个链式实现:

// Get a string sort key for an item
function sortKey(item) {
    return item.Timestamp + item.payload.value;
}

var myArray = data.Items
    // Copy the array to avoid modifying the original
    .slice()
    // Sort using custom logic
    .sort(function(a, b) {
        return sortKey(a) > sortKey(b) ? 1 : -1;
    })
    // Use map to transform
    .map(function(b) {
        return Date(b.Timestamp + 'UTC');
    });