我有一个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));
});
},
这很好用。我想要做的是排除{&#34;所有&#34; :&#34; Targeted&#34;}来自排序并始终将它作为JSON对象的第一个元素,如下所示:
[
{"All" : "Targeted"},
{"AT&T" : "Blocked"},
{"Sprint" : "Blocked"}
{"Verizon" : "Blocked"},
]
有人能给我一些关于如何实现这一目标的提示吗?基本上我需要一种方法来排除JSON对象中的任何项目,并将其设置为对象的第一个元素。
提前致谢!
答案 0 :(得分:5)
如果你想排除一个值,例如将它保持在排序的顶部,每当你的排序函数遇到它时,如果第一个参数它总是返回-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]
答案 1 :(得分:1)
假设arr
是您的数组,最简单的方法是使用shift
获取第一个元素,这将使您在数组中的其余元素循环,之后您可以只添加第一个元素使用unshift
回到数组的开头:
var first = arr.shift();
// arr now contains just the other elements
// do your sorting
arr.unshift(first);
或者,如果'All'元素不在数组的开头,使用map
/ filter
获取'All'的索引,则使用splice
获取新数组,然后使用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);