Joe*_*bel 3 javascript sorting jquery asynchronous
Javascript Array.sort函数是否异步?我不这么认为,但是当我运行以下代码时,它确实似乎是:
$('#alphabetical-order').data('sort-column', 'FileAlpha');
$('#first-numeric-order').data('sort-column', 'FileFirstNumeric');
$('#last-numeric-order').data('sort-column', 'FileLastNumeric');
$('#alphabetical-order, #first-numeric-order, #last-numeric-order').each(function() {
var $this = $(this);
$this.data('compare-function', function(row1, row2) {
console.log('column = ' + $this.data('sort-column')); // >> DEBUG 1
compareRowsBasedOnColumn(row1, row2, $this.data('sort-column'));
});
}).click(function() {
var $this = $(this);
var $content = $('table.sheetlist-content tr.content');
$content.sort($this.data('compare-function'));
console.log('$content.sort complete'); // >> DEBUG 2
$table_body = $('table.sheetlist-content tbody')
$table_body.html('');
for (i=0; i<$content.length; ++i) {
$table_body.append($content[i]);
}
saveAll(); // which POSTs to our server
});
Run Code Online (Sandbox Code Playgroud)
(如果需要的话,我可以提供compareRowsBasedOnColumn,但这就是名字所说的.)
在Firefox与Firebug调试运行,我看到帖子从我saveAll在控制台前的DEBUG 2上方,与穿插DEBUG 1秒,我没有得到我的内容有效地使出.DEBUG 1正在给我我期望的结果.
另外,这只是有意义的Javascript Array.sort函数是异步的.
如果它确实是异步的,那么任何人都可以提出一种重写这种方法的好方法,而不是编写我自己的类型(我真的更愿意坚持使用它们,如果只是为了清晰起见).
是.Array#sort保证由JavaScript所基于的ECMAScript规范同步.
该算法在此处明确指定:
设obj是调用ToObject将此值作为参数传递的结果.
获得this价值.
设len是将Uint32应用于使用参数"length"调用obj的[[Get]]内部方法的结果.
获得.length价值.
如果comparefn未定义且不是此数组元素的一致比较函数(请参见下文),则sort的行为是实现定义的.
获取传递的比较函数.如果它是未定义的,那么实现可以做任何想做的事情(实际上,它会进行词法排序,但是它必须是同步的,因为我们等待它,因为我们很快就会看到它).
执行依赖于实现的调用序列,调用obj的[[Get]],[[Put]]和[[Delete]]内部方法以及SortCompare(如下所述),其中每次调用[[]的第一个参数获取]],[[Put]]或[[Delete]]是一个小于len的非负整数,其中对SortCompare的调用参数是先前调用[[Get]]内部方法的结果.[[Put]]和[[Delete]]内部方法的throw参数将为true.如果obj不稀疏,则不能调用[[Delete]].
返回obj.
因此,它在SortCompare中执行操作.这只是比较它们(下面几行).
请注意,使用的排序是实现定义的(实际上在实现中会有所不同),也不能保证稳定.
| 归档时间: |
|
| 查看次数: |
5432 次 |
| 最近记录: |