我的数组中有 2 个集合,每个集合都是一个对象数组。我想使用 _.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!
...但是,显然没有任何改变。问题是,正确的方法应该是什么?
最佳答案
首先,在排序过程之后检查 O1
和 O2
变量 的值是毫无用处的 - 它们不会改变。请注意,_.sortBy
不会对给定数组进行排序(如 native 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 .
关于javascript - 强调如何使用each并对多个对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21575768/