对JavaScript中除一个元素之外的数组进行排序
我有一个数组,我正在对它进行排序,但我需要对数组中除一个元素以外的所有元素进行排序 我的阵列是:对JavaScript中除一个元素之外的数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个数组,我正在对它进行排序,但我需要对数组中除一个元素以外的所有元素进行排序 我的阵列是: var Comparison = [ {key: "None", value: "None"}, {key:"Geographical Area", value:"Geographical_Area"}, {key:"Forests", value:"Forests"}, {key:"Barren Unculturable Land", value:"Barren_U
var Comparison = [
{key: "None", value: "None"},
{key:"Geographical Area", value:"Geographical_Area"},
{key:"Forests", value:"Forests"},
{key:"Barren Unculturable Land", value:"Barren_Unculturable_Land"},
{key:"Land put to Non agricultural use", value:"Land_put_to_Non_agricultural_use"},
{key:"Land Area", value:"Land_Area"},
{key:"Water Area", value:"Water_Area"},
{key:"Culturable Waste", value:"Culturable_Waste"},
{key:"Permanent Pastures", value:"Permanent_Pastures"},
{key:"Land under Tree Crops", value:"Land_under_Tree_Crops"},
{key:"Fallow Land excl Current Fallow", value:"Fallow_Land_excl_Current_Fallow"},
{key:"Current Fallow", value:"Current_Fallow"},
{key:"Total Unculturable Land", value:"Total_Unculturable_Land"},
{key:"Net Sown Area", value:"Net_Sown_Area"},
{key:"Gross Sown Area", value:"Gross_Sown_Area"},
{key:"Cropping Intensity", value:"Cropping_Intensity"} ];
我正在使用以下代码对该数组进行排序:
var Comparison_sort = this.Comparison.sort(function (a, b) {
if (a.key < b.key)
return -1;
if (a.key > b.key)
return 1;
return 0;
});
但我想要这样的结果:
{key: "None", value: "None"}
{key: "Barren Unculturable Land", value: "Barren_Unculturable_Land"}
{key: "Cropping Intensity", value: "Cropping_Intensity"}
{key: "Culturable Waste", value: "Culturable_Waste"}
....
我看到了答案,但我无法使用此答案解决我的问题。var Comparison\u sort=this.Comparison.sort(函数(a,b){
var Comparison_sort = this.Comparison.sort(function (a, b) {
if(a.key == b.key) return 0;
if (a.key == 'None') return -1;
if (b.key == 'None') return 1;
if (a.key < b.key)
return -1;
if (a.key > b.key)
return 1;
return 0;
});
如果(a.key==b.key)返回0;
如果(a.key=='None'),则返回-1;
如果(b.key=='None'),则返回1;
如果(a键b键)
返回1;
返回0;
});
告诉“执行常规排序,除非键为none,这意味着它必须先进行排序。”只需在开头添加一个检查。如果是“无”对象,则将其移动到前面,而不执行检查
var Comparison_sort = this.Comparison.sort(function (a, b) {
if (a.key == "None" && a.value == "None")
return -1;
if (b.key == "None" && b.value == "None")
return 1;
if (a.key < b.key)
return -1;
if (a.key > b.key)
return 1;
return 0;
});
var Comparison\u sort=this.Comparison.sort(函数(a,b){
如果(a.key==“None”&&a.value==“None”)
返回-1;
如果(b.key==“None”&&b.value==“None”)
返回1;
如果(a键b键)
返回1;
返回0;
});
可能有更好的方法,但这应该是可行的:
有关良好的工作示例,请参见 您可以使用
reduce
获得所需的输出:
var比较=[{key:“地理区域”,value:“地理区域”},{key:“森林”,value:“森林”},{key:“贫瘠的非耕地”,value:“贫瘠的非耕地”},{key:“无”,value:“无”},{key:“土地非农业利用”,value:“土地非农业利用”},{key:“土地面积”,value:“土地面积”},{key:“水域”,价值:“水域”,价值:{key:“可养殖废弃物”,价值:{key:“永久牧场”,价值:{key:“永久牧场”},价值:{key:“树木下的土地”,价值:{key:“树木下的土地”},价值:{key:“休耕土地,不包括当前休耕地”,价值:{key:“休耕土地,不包括当前休耕地”},价值:{key:“当前休耕地”},{key:“总非耕地”,价值:“总非耕地”},{关键字:“净播种面积”,价值:“净播种面积”},{关键字:“总播种面积”,价值:“总播种面积”},{关键字:“种植强度”,价值:“种植强度”},]
变量比较\排序=比较
.sort((a,b)=>a.key.localeCompare(b.key))
.减少((acc,e)=>{
e、 按键==‘无’?加速取消换档(e):加速推动(e);
返回acc;
}, []);
console.log(Comparison_sort);
或者,您可以过滤掉none并对其他元素进行排序。然后在末尾将它们重新连接起来
const comparison=[{key:“无”,value:“无”},{key:“地理区域”,value:“地理区域”},{key:“森林”,value:“森林”},{key:“贫瘠的未开垦土地”,value:“贫瘠的未开垦土地”},{key:“土地非农业利用”,value:“土地非农业利用”},{key:“土地面积”,value:“土地面积”},{key:“水域”,value:“水域”},{key:“可养殖废弃物”,value:“可养殖废弃物”},{key:“永久牧场”,value:“永久牧场”},{key:“树木下的土地”,value:“树木下的土地”},{key:“不包括当前休耕的休耕土地”,value:“休耕土地不包括当前休耕”},{key:“当前休耕”,value:“当前休耕”},{key:“总非耕地”,value:“总非耕地”},{key:“净播种面积”,value:“净播种面积”},{key:“总播种面积”,value:“总播种面积”},{key:“种植强度”,value:“种植强度”};
常量结果=比较
.filter(e=>e.key=='None')
康卡特先生(
comparison.filter(e=>e.key!=='None')
.sort((a,b)=>a.key.localeCompare(b.key))
);
console.log(result);
这并不奇怪,但一种非常简单的方法是删除特殊元素,对数组进行排序,然后将特殊元素插入到所需的任何索引中
var比较=[{key:“无”,value:“无”},{key:“地理区域”,value:“地理区域”},{key:“森林”,value:“森林”},{key:“贫瘠的未开垦土地”,value:“贫瘠的未开垦土地”},{key:“土地非农业用途”,value:“土地非农业用途”},{key:“土地面积”,value:“土地面积”“},{key:“水域”,value:“水域”},{key:“可养殖废弃物”,value:“可养殖废弃物”},{key:“永久牧场”,value:“永久牧场”},{key:“树木下的土地”,value:“树木下的土地”},{key:“不包括当前休耕的休耕土地”,value:“休耕土地,不包括当前休耕的土地”},{key:“当前休耕的土地”,value:“当前休耕地”},{key:“总非耕地”},value:“总非耕地”},{key:“净播种面积”},value:“净播种面积”},{key:“总播种面积”,value:“总播种面积”},{key:“种植强度”,value:“种植强度”},];
const idx=Comparison.findIndex(a=>a.key=='None');
const none=比较拼接(idx,1);
比较.sort((a,b)=>a.key.localeCompare(b.key));
比较:拼接(0,0,无[0]);
console.log(Comparison);
.sort函数将回调作为参数。此回调将传递两个值。回调的任务是确定哪个值更大。它通过返回一个数值来执行此操作
假设传递给回调函数的参数被称为a
和b
。我已将回调函数在每种情况下应返回的值用粗体表示
小于0a
大于0a>b
等于0a=b
var Comparison_sort = this.Comparison.sort(function (a, b) {
if (a.key == "None" && a.value == "None")
return -1;
if (b.key == "None" && b.value == "None")
return 1;
if (a.key < b.key)
return -1;
if (a.key > b.key)
return 1;
return 0;
});
Comparison.sort(function(a, b) {
// Our extra code
if(a.key === b.key) return 0; // Zero (a = b)
if(a.key === "None") return -1; // Negative (a < b)
if(b.key === "None") return 1; // Positive (b < a)
// Old sort
if(a.key < b.key) return -1;
if(b.key < a.key) return 1;
})
if(a.key < b.key) return -1;
if(b.key < a.key) return 1;
return (b.key < a.key) - (a.key < b.key)
this.Comparison.sort(function (a, b) {
if(a.key == b.key) return 0;
if (a.key == 'None' || b.key == 'None') return -1;
if (a.key < b.key)
return -1;
if (a.key > b.key)
return 1;
return 0;
});
const array1 = this.Comparison.filter(e => e.key === 'None');
const array2 = this.Comparison
.filter(e => e.key !== 'None')
.sort((a, b) => a.key.localeCompare(b.key));
this.Comparison = [].concat(array1, array2);