如何在函数执行后防止对象更改?

时间:2015-06-26 13:16:05

标签: javascript sorting object closures

我已经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。所有这些代码现在都位于同一个文件中。

1 个答案:

答案 0 :(得分:0)

只需字符串化并解析它并使用副本:

var gamesCopy = JSON.parse(JSON.stringify(games));