Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 对JSON对象(不包括项)进行排序_Javascript_Jquery_Json_Sorting - Fatal编程技术网

Javascript 对JSON对象(不包括项)进行排序

Javascript 对JSON对象(不包括项)进行排序,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,我有一个JSON对象,如下所示: [ {"AT&T" : "Blocked"}, {"All" : "Targeted"}, {"Verizon" : "Blocked"}, {"Sprint" : "Blocked"} ] 我使用以下函数按字母顺序对其进行排序: sortByKey : function(array, key) { return array.sort(function(a, b) { var x

我有一个JSON对象,如下所示:

[
    {"AT&T" : "Blocked"},
    {"All" : "Targeted"},
    {"Verizon" : "Blocked"},
    {"Sprint" : "Blocked"}
]
我使用以下函数按字母顺序对其进行排序:

sortByKey : function(array, key) {
        return array.sort(function(a, b) {
            var x = a[key]; var y = b[key];
            return ((x < y) ? -1 : ((x > y) ? 1 : 0));
        });
    },
有谁能给我一个关于如何实现这一点的提示吗?基本上,我需要一种方法从JSON对象中排除排序中的任何项,并将其设置为对象的第一个元素


提前谢谢

假设
arr
是您的数组,最简单的方法是使用第一个元素,这将使您保留数组中的其余元素进行循环,然后您可以使用以下方法将第一个元素预先添加回数组的开头:

或者,如果“All”元素不在数组的开头,请使用/获取“All”的索引,然后使用获取新数组,然后使用
unshift
将元素添加回数组

var index = arr.map(function(el, i) {
  if (Object.keys(el)[0] === 'All') { return i; }
}).filter(Number)[0];

var first = arr.splice(index, 1)[0];

// arr now contains just the other elements
// do your sorting

arr.unshift(first);

如果要排除某个值(例如,将其保持在排序的顶部),则每当排序函数遇到该值时,总是返回-1(如果是第一个参数)或1(如果是第二个参数)

//Keep 2 at the front
[1,254,6,2,62].sort(function(a,b){
  if(a == 2) return -1; else if(b == 2) return 1;
  return a-b;
});

[2, 1, 6, 62, 254]

//Keep 2 at the back
[1,254,6,2,62].sort(function(a,b){
  if(a == 2) return 1; else if(b == 2) return -1;
  return a-b;
});

[1, 6, 62, 254, 2]

也许你可以对它进行排序,然后移动项目。或者先删除它,排序,然后重新添加。我不确定
sortByKey
是否能像您所想的那样工作。没有一个对象具有相同的键,因此无法按其排序。最后,您将根据“未定义”对“未定义”进行排序。如果他们最终被分类,那是运气使然。不管怎样,正如@GolezTrol所暗示的,我不会试图修改排序函数以尊重“全部”,而是会按照常规排序并在后面移动它,或者先删除它并在后面固定它,或者甚至不把它放在列表的第一位,然后在后面添加它。@Matt,干杯。花了一点时间,但找到了一个很好的解决方案。请注意,
splice()
返回一个删除的元素数组,所以您需要
var first=arr.splice(index,1)[0]
。有时,一个简单的(;)循环可能比“时髦”的新数组方法更合适;不过,这可能是其中之一()
var index = arr.map(function(el, i) {
  if (Object.keys(el)[0] === 'All') { return i; }
}).filter(Number)[0];

var first = arr.splice(index, 1)[0];

// arr now contains just the other elements
// do your sorting

arr.unshift(first);
//Keep 2 at the front
[1,254,6,2,62].sort(function(a,b){
  if(a == 2) return -1; else if(b == 2) return 1;
  return a-b;
});

[2, 1, 6, 62, 254]

//Keep 2 at the back
[1,254,6,2,62].sort(function(a,b){
  if(a == 2) return 1; else if(b == 2) return -1;
  return a-b;
});

[1, 6, 62, 254, 2]