我有一个包含对象的数组,每个对象都有以下属性:
{ country: 'United States' },
{ country: 'Netherlands' },
{ country: 'Spain' },
{ country: 'Spain' },
我想对数组进行排序,以便第一个值为'西班牙'然后展示所有其他人。我尝试使用array.sort但似乎无法正常工作。不确定我做错了什么。
到目前为止,我尝试了这个
arr.sort(function(a, b) {return a.country === 'Spain'})
也
arr.sort(function(a, b) {if (a.country === 'Spain') {return 1}})
答案 0 :(得分:3)
你可以检查字符串,你想排序到顶部并取得比较的增量。
其他国家/地区的排序顺序并不稳定。
var array = [{ country: 'United States' }, { country: 'Netherlands' }, { country: 'Spain' }, { country: 'Spain' }];
array.sort(function (a, b) {
return (b.country === 'Spain') - (a.country === 'Spain');
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
对于稳定排序,将'Spain'
排序到顶部,其余按原始索引排序,您可以使用sorting with map。
var array = [{ country: 'United States' }, { country: 'Netherlands' }, { country: 'Spain' }, { country: 'Spain' }],
sorted = array
.map(function (o, i) {
return { top: o.country === 'Spain', index: i };
})
.sort(function (a, b) {
return b.top - a.top || a.index - b.index;
})
.map(function (o) {
return array[o.index];
});
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
不需要实际排序。把它分成两个不同的数组,然后将它们组合起来。
这也保证了原始子订单的维护。
var data = [{"country":"United States"},{"country":"Netherlands"},{"country":"Spain"},{"country":"Spain"}];
var res = [].concat(...data.reduce((res, obj) =>
(res[obj.country === "Spain" ? 0 : 1].push(obj), res)
, [[],[]]));
console.log(res);
如果你需要改变原作,那就这样做:
var data = [{"country":"United States"},{"country":"Netherlands"},{"country":"Spain"},{"country":"Spain"}];
var res = Object.assign(data, [].concat(...data.reduce((res, obj) =>
(res[obj.country === "Spain" ? 0 : 1].push(obj), res)
, [[],[]])));
console.log(data);
答案 2 :(得分:1)
使用Javascript数组函数应该相当容易,尤其是sort()
,filter()
和reverse()
。
var json = [
{
country: 'United States'
},
{
country: 'Netherlands'
},
{
country: 'Spain'
},
{
country: 'Spain'
}
];
var sorted =
// Spain Terms First
json.filter(j => j.country === 'Spain')
// Add Alphabetically-Sorted Other Terms
.concat(json.filter(j => j.country !== 'Spain').sort().reverse());
console.log(sorted);