Javascript JS对象排序日期排序
我将JS对象定义如下-Javascript JS对象排序日期排序,javascript,jquery,Javascript,Jquery,我将JS对象定义如下- var item = {}; item[guid()] = { symbol: $('#qteSymb').text(), note: $('#newnote').val(), date: $.datepicker.formatDate('mm/dd/yy', dt) + " " + dt.getHours() + ":" + minutes, pagename: getPageName() }; 在我的应用程序中的某个时刻,我从chro
var item = {};
item[guid()] =
{
symbol: $('#qteSymb').text(),
note: $('#newnote').val(),
date: $.datepicker.formatDate('mm/dd/yy', dt) + " " + dt.getHours() + ":" + minutes,
pagename: getPageName()
};
在我的应用程序中的某个时刻,我从chrome.storage中获得了这些(项目
)的列表,我希望能够根据日期对其进行排序
这就是我正在做的
var sortable = [];
$.each(Items, function (key, value) {
if (value.symbol == $('#qteSymb').text() || all) {
sortable.push([key, value]);
}
});
console.log(sortable);
sortable.sort(function (a, b) {
a = new Date(a[1].date);
b = new Date(b[1].date);
return a > b ? -1 : a < b ? 1 : 0;
});
console.log(sortable);
var-sortable=[];
$。每个(项目、功能(键、值){
如果(value.symbol==$('#qteSymb').text()| | all){
可排序的推送([键,值]);
}
});
console.log(可排序);
sortable.sort(函数(a,b){
a=新日期(a[1]。日期);
b=新日期(b[1]。日期);
返回a>b-1:a
它似乎不起作用。第一个和第二个console.log(可排序)代码>是相同的。我已尝试更改返回a>b-1:a到返回ab?1 : 0;
只是想看看我是否对可排序的进行了任何更改,但什么都没有发生。。。
谢谢~两个console.log
都显示相同的数组,因为当您使用console.log(sortable)
时,sortable
是通过引用传递的,当sortable
已经排序后,控制台输出会在脚本完成后发生
使代码简单化:
var arr = [3,2,1];
console.log(arr); // Produces `[1,2,3]` because its printed
// to the console after `arr.sort();`
arr.sort();
console.log(arr); // Produces `[1,2,3]`, as expected
演示:
解决方法
如果您希望能够使用数组执行console.log
,以便在修改之前查看该数组,则可以使用.slice(0)
复制该数组,即获取另一个数组,该数组包含与您的数组相同的元素
var arr = [3,2,1];
console.log(arr.slice(0)); // [3,2,1]
arr.sort();
console.log(arr); // [1,2,3]
演示:
编辑:最好使用.slice(0)
而不是.slice(),当sortable
已经排序时,控制台输出在脚本完成后发生
使代码简单化:
var arr = [3,2,1];
console.log(arr); // Produces `[1,2,3]` because its printed
// to the console after `arr.sort();`
arr.sort();
console.log(arr); // Produces `[1,2,3]`, as expected
演示:
解决方法
如果您希望能够使用数组执行console.log
,以便在修改之前查看该数组,则可以使用.slice(0)
复制该数组,即获取另一个数组,该数组包含与您的数组相同的元素
var arr = [3,2,1];
console.log(arr.slice(0)); // [3,2,1]
arr.sort();
console.log(arr); // [1,2,3]
演示:
编辑:最好使用.slice(0)
而不是.slice()
,FF支持.slice()
,但是ecma262规范说只有结束
参数是可选的。@Oriol:
我只是做了一把同样的小提琴,但对我来说它确实有用
var ar=[3,1,8,4,7,2,4,1]
console.log(ar.join(','));
ar.sort();
console.log(ar.join(','));
给予:
[18:55:31.616] "3,1,8,4,7,2,4,1"
[18:55:31.616] "1,1,2,3,4,4,7,8"
@奥利奥:
我只是做了一把同样的小提琴,但对我来说它确实有用
var ar=[3,1,8,4,7,2,4,1]
console.log(ar.join(','));
ar.sort();
console.log(ar.join(','));
给予:
[18:55:31.616] "3,1,8,4,7,2,4,1"
[18:55:31.616] "1,1,2,3,4,4,7,8"
我建议只存储timestampdt.getTime()
,并简单地按它排序:返回a[2]-b[2]
您是否已检查是否确实从新日期(a[1].Date)
?->获取了所需的日期对象在函数中使用console.log(a.toString()+'和'+b.toString())
。我建议只存储时间戳dt.getTime()
,并简单地按它排序,如:返回a[2]-b[2]
您是否已检查是否确实从新日期(a[1].Date)
?->获取了所需的日期对象在函数中使用console.log(a.toString()+”和'+b.toString())
。这是因为您使用了ar.join(',')
,所以将ar
转换为字符串。然后,当您修改ar
时,字符串不会被修改。这是不对的.join()
只返回从数组对象派生的字符串,并保持实际数组不变。否则我就不能再参加第二次了……是的,我是这个意思,但我没有解释清楚。但我想指出的是,您使用字符串而不是对象ar
调用console.log
。然后,如果您更改ar
,字符串将不会更改。因此,为了让@americanslon看到差异,他应该通过执行类似于var arr1=sortable.slice(0)的操作来生成数组的独立实例代码>?这是因为您使用了ar.join(',')
,所以将ar
转换为字符串。然后,当您修改ar
时,字符串不会被修改。这是不对的.join()
只返回从数组对象派生的字符串,并保持实际数组不变。否则我就不能再参加第二次了……是的,我是这个意思,但我没有解释清楚。但我想指出的是,您使用字符串而不是对象ar
调用console.log
。然后,如果您更改ar
,字符串将不会更改。因此,为了让@americanslon看到差异,他应该通过执行类似于var arr1=sortable.slice(0)的操作来生成数组的独立实例代码>?好的,这很有意义,谢谢奥利奥。这意味着console.log不是一个可靠的调试工具?您如何确认分拣?我在console.log(sortable)
点和点中都放置了断点,但数组仍然是一样的。@americanslon如果您想调试数组,最好使用.slice()
复制它们。好的,这很有意义,谢谢Oriol。这意味着console.log不是一个可靠的调试工具?您如何确认分拣?我在console.log(sortable)
spot中都放置了断点,但数组仍然是一样的。@americanslon如果要调试数组,最好使用.slice()复制它们。