我在一个数组中有两个集合,每个集合都是一个对象数组。我想使用_.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!
......但是,显然,没有任何变化。问题是,什么应该是正确的方法?
答案 0 :(得分:2)
首先,在排序过程之后检查O1
和O2
变量的值是无用的 - 它们不会改变。请参阅_.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!