我已经google了很多但是无法得到它......
我有一个对象
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']));
所有这些都产生相同的结果并显示最后一次排序的结果。我理解,很可能答案是在范围和闭包中,但我无法理解如何更改代码,以便以不同方式显示所有三个输出。
PS。所有这些代码现在都位于同一个文件中。
答案 0 :(得分:0)
只需字符串化并解析它并使用副本:
var gamesCopy = JSON.parse(JSON.stringify(games));