访问javascript循环外部的变量

访问javascript循环外部的变量,javascript,sorting,time,utc,Javascript,Sorting,Time,Utc,下面是我的代码。我使用UTC时间戳对数据进行正确排序,但希望在排序后转换为本地时间(最后两行注释就是这样做的)。但是,如果在排序之前进行转换,则结果不正确。如果我尝试在函数外部进行转换,则b.Timestamp没有上下文 var myArray = []; data.Items.forEach(function(b) { myArray.push(b.Timestamp + "text" + b.payload.value ); }); myArray.sort(); //var

下面是我的代码。我使用UTC时间戳对数据进行正确排序,但希望在排序后转换为本地时间(最后两行注释就是这样做的)。但是,如果在排序之前进行转换,则结果不正确。如果我尝试在函数外部进行转换,则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)"

排序时必须保留原始数组,然后对其进行变换。可以通过将自定义比较函数传递给
.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');
    });

欢迎来到堆栈溢出。请找个时间读一下这两页。您可能应该用宿主语言来标记它——我怀疑它是JavaScript,但我可能错了。它会让你的问题在具有相关专业知识的人面前比当前的标签更好地出现。你应该放弃;这有一个与时间无关的目的。现在还不清楚这有多重要,因为你正在使用一个数组。你不只是在排序的数组上使用另一个循环,将转换应用到数组中的值吗?嗨,乔纳森-我相信你是对的,但我很难让它工作。我不知道如何访问原始循环之外的b.时间戳。b没有上下文。