Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止函数执行后对象发生更改?_Javascript_Sorting_Object_Closures - Fatal编程技术网

Javascript 如何防止函数执行后对象发生更改?

Javascript 如何防止函数执行后对象发生更改?,javascript,sorting,object,closures,Javascript,Sorting,Object,Closures,我在谷歌上搜索了很多,但都找不到 我有一个目标 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_数组)。它基本上只是对该数组进行排序,并返回一个排序后的数组,就像许

我在谷歌上搜索了很多,但都找不到

我有一个目标

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_数组)。它基本上只是对该数组进行排序,并返回一个排序后的数组,就像许多教程中所写的那样

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;
});
它们都产生相同的结果,并显示最后一次排序的结果。我理解,答案很可能在范围和闭包中,但我不知道如何更改代码,使其以不同的方式显示所有三个输出


另外,所有这些代码现在都位于同一个文件中。

只需对其进行字符串化和解析,然后使用副本:

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

我不知道在哪里使用了
attr
?复制对象。attr是prop吗?从你如何使用它,看起来像过滤器…是的,道具是由属性。复印的正确方法是什么?我尝试过做var-arr=游戏;在函数开始时,但它不工作。这是一种常见的方法吗?我尝试过做var-arr=游戏;在函数的开头,但它不起作用。
var arr=games
保留对
games
的引用,因此它没有帮助。通常深度拷贝会有所帮助。使用JSON是归档的常用方法。唯一的缺点是,它只适用于属性。
var gamesCopy = JSON.parse(JSON.stringify(games));