对子对象键上的对象的javascript数组进行排序
我有一个对象数组,其中包含这样的子对象对子对象键上的对象的javascript数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个对象数组,其中包含这样的子对象 var array=[ { "EmployeeName": "John", "Experience": "12", "data":{ "Technology":"SharePoint" } }, { "EmployeeName": &q
var array=[
{
"EmployeeName": "John",
"Experience": "12",
"data":{
"Technology":"SharePoint"
}
},
{
"EmployeeName": "Charles",
"Experience": "9",
"data":{
"Technology":"ASPNET"
}
},
{
"EmployeeName": "Jo",
"Experience": "3",
"data":{
"Technology":"PHP"
}
},
{
"EmployeeName": "Daine",
"Experience": "7",
"data":{
"Technology":"javascript"
}
},
{
"EmployeeName": "Zain",
"Experience": "6",
"data":{
"Technology":"Unity"
}
}
];
现在,我想根据子对象键“技术”对该数组进行排序。我使用的例子如下:
当它从基本对象排序时,它会执行此操作,但如何使其工作:
function GetSortOrder(prop){
return function(a,b){
if( a[prop] > b[prop]){
return 1;
}else if( a[prop] < b[prop] ){
return -1;
}
return 0;
}
}
array.sort( GetSortOrder("data.Technology") );
document.write("<br><br> Sorted Technology Names : <br>");
for (var item in array) {
document.write("<br>"+array[item].Technology);
}
希望有人能在这件事上提供帮助,并提前感谢:-)
未定义如果传递的属性包含任何
s,请使用reduce
导航到比较前的最后一个嵌套值:
const GetSortOrder = (accessor) => {
const getVal = accessor.includes('.')
? outer => accessor.split('.').reduce((a, prop) => a[prop], outer)
: outer => outer;
return (a, b) => getVal(a).localeCompare(getVal(b));
};
var数组=[
{
“雇员姓名”:“约翰”,
“经验”:“12”,
“数据”:{
“技术”:“SharePoint”
}
},
{
“雇员姓名”:“查尔斯”,
“经验”:“9”,
“数据”:{
“技术”:“ASPNET”
}
},
{
“员工姓名”:“Jo”,
“经验”:“3”,
“数据”:{
“技术”:“PHP”
}
},
{
“员工姓名”:“Daine”,
“经验”:“7”,
“数据”:{
“技术”:“javascript”
}
},
{
“雇员姓名”:“Zain”,
“经验”:“6”,
“数据”:{
“技术”:“统一”
}
}
];
const GetSortOrder=(访问器)=>{
const getVal=accessor.includes(“.”)
外部=>accessor.split('.').reduce((a,prop)=>a[prop],外部)
:outer=>outer;
return(a,b)=>getVal(a).localeCompare(getVal(b));
};
sort(GetSortOrder(“data.Technology”);
console.log(数组)代码>如果传递的属性包含任何
s,请使用reduce
导航到比较前的最后一个嵌套值:
const GetSortOrder = (accessor) => {
const getVal = accessor.includes('.')
? outer => accessor.split('.').reduce((a, prop) => a[prop], outer)
: outer => outer;
return (a, b) => getVal(a).localeCompare(getVal(b));
};
var数组=[
{
“雇员姓名”:“约翰”,
“经验”:“12”,
“数据”:{
“技术”:“SharePoint”
}
},
{
“雇员姓名”:“查尔斯”,
“经验”:“9”,
“数据”:{
“技术”:“ASPNET”
}
},
{
“员工姓名”:“Jo”,
“经验”:“3”,
“数据”:{
“技术”:“PHP”
}
},
{
“员工姓名”:“Daine”,
“经验”:“7”,
“数据”:{
“技术”:“javascript”
}
},
{
“雇员姓名”:“Zain”,
“经验”:“6”,
“数据”:{
“技术”:“统一”
}
}
];
const GetSortOrder=(访问器)=>{
const getVal=accessor.includes(“.”)
外部=>accessor.split('.').reduce((a,prop)=>a[prop],外部)
:outer=>outer;
return(a,b)=>getVal(a).localeCompare(getVal(b));
};
sort(GetSortOrder(“data.Technology”);
console.log(数组)代码>技术不是对象的属性。它是object.data的属性
试着改变
javascript数组[项]。技术
到
数组[项].data.Technology
技术不是对象的属性。它是object.data的属性
试着改变
javascript数组[项]。技术
到
数组[item].data.Technology
您可以添加一个函数,通过保持比较方法来获取值
函数GetSortOrder(prop){
常数
keys=prop.split('.'),
getValue=object=>keys.reduce((o,k)=>o[k],object);
返回函数(a,b){
常数
左=getValue(a),
右=getValue(b);
如果(左>右)返回1;
否则如果(左<右)返回-1;
返回0;
}
}
var数组=[{EmployeeName:“John”,体验:“12”,数据:{Technology:“SharePoint”},{EmployeeName:“Charles”,体验:“9”,数据:{Technology:“ASPNET”},{EmployeeName:“Jo”,体验:“3”,数据:{Technology:“PHP”},{EmployeeName:“Daine”,体验:“7”,数据:{Technology:“javascript”},{EmployeeName:“Zain”,经验:“6”,数据:{技术:“联合”}};
sort(GetSortOrder(“data.Technology”);
console.log(数组)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以添加一个函数,通过保持比较方法来获取值
函数GetSortOrder(prop){
常数
keys=prop.split('.'),
getValue=object=>keys.reduce((o,k)=>o[k],object);
返回函数(a,b){
常数
左=getValue(a),
右=getValue(b);
如果(左>右)返回1;
否则如果(左<右)返回-1;
返回0;
}
}
var数组=[{EmployeeName:“John”,体验:“12”,数据:{Technology:“SharePoint”},{EmployeeName:“Charles”,体验:“9”,数据:{Technology:“ASPNET”},{EmployeeName:“Jo”,体验:“3”,数据:{Technology:“PHP”},{EmployeeName:“Daine”,体验:“7”,数据:{Technology:“javascript”},{EmployeeName:“Zain”,经验:“6”,数据:{技术:“联合”}};
sort(GetSortOrder(“data.Technology”);
console.log(数组)代码>
.as控制台包装{max height:100%!important;top:0;}
a[“data.Technology”]
与a[“data”][“Technology”]
不同。