下划线如何使用每个对象并对多个对象进行排序

时间:2014-02-05 11:19:21

标签: javascript underscore.js

我在一个数组中有两个集合,每个集合都是一个对象数组。我想使用_.each对它们进行排序,并返回一个带有以下内容的排序对象:

var O1 = [{'name':'one'}, {'name':'two'}, {'name':'three'}, {'name':'four'}, {'name':'five'}, {'name':'six'}];
var O2 = [{'name':'rat'}, {'name':'cat'}, {'name':'lion'}, {'name':'tiger'}, {'name':'dog'}, {'name':'horse'}];

var sortIt = [O1, O2];

_.each(sortIt, function(item){
    item = _.sortBy(item, function(arr){
        return arr.name;
    })
    return item;
})

console.log(O1, "\n", O2); //nothing changed!

......但是,显然,没有任何变化。问题是,什么应该是正确的方法?

Live Demo

1 个答案:

答案 0 :(得分:2)

首先,在排序过程之后检查O1O2 变量的值是无用的 - 它们不会改变。请参阅_.sortBy没有对给定的数组进行排序(如本机Array#sort所做的那样),而是返回一个新的(已排序的)副本。

其次,从_.each迭代器函数返回任何内容都没有意义 - 它只会被忽略。

最后,要调整列表的特定元素,您需要解决该元素;只是将一些值重新分配给param变量(代码中为item)是不够的。

这是一种做你想做的事情的方法:

var sortIt = [O1, O2];
_.each(sortIt, function(item, index, list) {
    list[index] = _.sortBy(item, function(arr) {
        return arr.name;
    });
})

console.log(sortIt); // something is definitely changed now!

Demo