Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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数组进行排序_Javascript_Arrays_Sorting - Fatal编程技术网

对子对象键上的对象的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”]
不同。