我希望对象键检查重复项,但我也想稍后对这些对象进行排序,我该怎么办?

时间:2012-07-16 15:42:32

标签: javascript jquery

我有一个名为newposts

的数组

我仔细研究它,如果它符合某些标准,我将它添加到另一个数组:

for (newpost in newposts){
    if (!(  newposts[newpost][0] in currentposts )){
        var triploc1 = locations[newposts[newpost][1]].location;
        var triploc2 = locations[newposts[newpost][2]].location;
        var detour_distance = fourpoint_distance(newloc1, triploc1, triploc2, newloc2);
        if (worthwhile_detour(original_distance,detour_distance)){
            currentposts.push(posts[newposts[newpost][0]])
        }
    }
}

第二行用于检查重复项(newposts[newpost][0])是否为ID。当我写它时,我忘记了当前的帖子是一个数组。显然,这不起作用。我需要currentposts成为一个数组,因为正好在下面我对它进行排序。选择完成后,我可以将其转换为数组。但我是javascript的新手,并相信有人可能知道更好的方法来做到这一点。

function sortposts(my_posts){
    my_posts.sort(function(a, b) {
        var acount = a.sortvar;
        var bcount = b.sortvar;
        return (bcount-acount);
    });

}

1 个答案:

答案 0 :(得分:1)

我不确定你的目标是什么,但我可以尝试为你清理它。请注意,我使用了underscore.js库,因为它可以更轻松地使用数组:)如果你不能将underscore.js包含在你的项目中,请告诉我,我和我#39;将其写入" pure" javascript:)

_.each(newposts, function(item) {
    if ( _.indexOf(currentposts, posts[item[0]]) >= 0 ) {
        var triploc1 = locations[item[1]].location;
        var triploc2 = locations[item[2]].location;

        var detour_distance = fourpoint_distance(newloc1, triploc1, triploc2, newloc2);

        if (worthwhile_detour(original_distance, detour_distance)){
            currentposts.push(posts[item[0]])
        }
    }
});

_.sortBy(currentposts, function(item) {
    return item.sortvar;
});

但是,我必须质疑为什么你要使用这么多阵列(新帖子,位置,帖子等)?他们都需要吗?