javascript - JS object sorting date sorting -
i have js object defined follows -
var item = {}; item[guid()] = { symbol: $('#qtesymb').text(), note: $('#newnote').val(), date: $.datepicker.formatdate('mm/dd/yy', dt) + " " + dt.gethours() + ":" + minutes, pagename: getpagename() };
at point in app getting list of (items
) chrome.storage , able sort based on date
here doing
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) { = new date(a[1].date); b = new date(b[1].date); return > b ? -1 : < b ? 1 : 0; }); console.log(sortable);
it doesn't seem work. first , second console.log(sortable);
same. have tried changing return > b ? -1 : < b ? 1 : 0;
return < b ? -1 : > b ? 1 : 0;
see if getting change sortable
nothing happens... thank you~
both console.log
show same array because when use console.log(sortable)
, sortable
passed reference, , console output happens after finishing script - when sortable
has been sorted.
making code simple:
var arr = [3,2,1]; console.log(arr); // produces `[1,2,3]` because printed // console after `arr.sort();` arr.sort(); console.log(arr); // produces `[1,2,3]`, expected
demo: http://jsfiddle.net/rfwph/
workaround
if want able console.log
array see before being modifyed, can use .slice(0)
copy array, i.e. obtain another array contains same elements array.
var arr = [3,2,1]; console.log(arr.slice(0)); // [3,2,1] arr.sort(); console.log(arr); // [1,2,3]
demo: http://jsfiddle.net/rfwph/2/
edit: better use .slice(0)
instead of .slice()
, supported on ff ecma262 spec says end
argument optional.
Comments
Post a Comment