Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS对象排序日期排序_Javascript_Jquery - Fatal编程技术网

Javascript 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

我将JS对象定义如下-

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"

我建议只存储timestamp
dt.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()复制它们。