【发布时间】:2015-06-26 13:16:04
【问题描述】:
我用谷歌搜索了很多,但无法找到它......
我有一个对象
var games = [
{name: 'Pako', rating: 4.21},
{name: 'Hill Climb Racing', rating: 3.88},
{name: 'Angry Birds Space', rating: 3.88},
{name: 'Badland', rating: 4.33}
];
以及将此对象作为参数的函数(obj_array)。它基本上只是对该数组进行排序并返回一个排序后的数组,就像在许多教程中所写的那样。
function sortByAttribute(obj_array, attr) {
...
return obj_array.sort(function(obj1, obj2) {
if (obj1[prop[0]] == obj2[prop[0]]) {
return (obj1[prop[1]] < obj2[prop[1]] ? 1: -1)*sortOrder;
}
return ((obj1[prop[0]] > obj2[prop[0]]) ? 1 : -1) * sortOrder;
});
}
那么,我有以下几行:
console.log(sortByAttribute(games, 'name'));
console.log(games);
console.log(sortByAttribute(games, ['-rating', 'name']));
它们都产生相同的结果并显示最后一次排序的结果。我明白,答案很可能在范围和闭包中,但我不知道如何更改代码,以便它以不同的方式显示所有三个输出。
附言。所有这些代码现在都位于同一个文件中。
【问题讨论】:
-
我没有看到
attr被用在了哪里? -
复制对象。
-
attr 是 prop 吗?从你的使用方式来看,看起来像过滤器......
-
是的,道具是由 attr 制成的。复制的正确方法是什么?我试着做 var arr = games;在函数的开头,但它没有工作
标签: javascript sorting object closures