不需要的数组排序

时间:2013-10-15 14:39:27

标签: javascript jquery arrays sorting

我有以下代码来获取元素的顺序。但不是按照元素的顺序获取数组,而是按字母顺序排列。

function gatherTreeIds( $parent ){
    var GatheredIds = [];
    $parent.children('div.nt_row').each(function(){
        GatheredIds[ this.title ] = 'someValue';
    });
    return GatheredIds;
}

<div id="Wrap">
    <div class="nt_row" title="AAA"></div>        
    <div class="nt_row" title="CCC"></div>
    <div class="nt_row" title="BBB"></div>
</div>

Here is my jsFiddle example(检查控制台的结果)。它为我['AAA','BBB','CCC']而不是所需的['AAA','CCC','BBB']

重要!这必须递归。目前还没有简化问题。

2 个答案:

答案 0 :(得分:4)

你混淆了数组和散列这两个概念。数组有顺序,而哈希有命名键,你不能同时拥有数据单结构。

使用数组:

var GatheredIds = [];
$parent.children('div.nt_row').each(function(){
    GatheredIds.push('someValue');
});
return GatheredIds;

如果要记录项目标题,可以使用哈希数组:

var GatheredIds = [];
$parent.children('div.nt_row').each(function(){
    GatheredIds.push({value: 'someValue', title: this.title);
});
return GatheredIds;

答案 1 :(得分:3)

这是因为您将标题存储为对象属性。在您的示例中,GatheredIds不是数组,这是一个对象。

JavaScript中的对象没有顺序(与PHP的地图数组相反)。如果您需要遵循订单,则应使用数组。

一种可能的解决方案:

function gatherTreeIds( $parent ){
    return $parent.children('div.nt_row').map(function() {
        return {
            title: this.title,
            value: 'someValue'
        };
    }).get();
}

DEMO: http://jsfiddle.net/FmyBb/4/