Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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,我有一个包含一些对象的数组,我正试图在其中循环,数据按以下顺序存储: 名字:爱丽丝 姓氏:仙境 年龄:12 我尝试循环,然后按降序排序,age:value应该在第一个位置,然后>lastName:Wonderland出现,最后是firstName 这是我的密码,直到现在 var数据={ 例1:[{ 名字:“爱丽丝”, 姓氏:“仙境”, 年龄:12 }], 例2:[{ 名字:“托马斯”, 姓:“Mathison”, 年龄:14 }], 例3:[{ 名字:“大卫”, 姓氏:“雅各布森”, 年龄:1

我有一个包含一些对象的数组,我正试图在其中循环,数据按以下顺序存储:

名字:爱丽丝
姓氏:仙境
年龄:12

我尝试循环,然后按降序排序,
age:value
应该在第一个位置,然后>
lastName:Wonderland
出现,最后是firstName

这是我的密码,直到现在

var数据={
例1:[{
名字:“爱丽丝”,
姓氏:“仙境”,
年龄:12
}],
例2:[{
名字:“托马斯”,
姓:“Mathison”,
年龄:14
}],
例3:[{
名字:“大卫”,
姓氏:“雅各布森”,
年龄:18
}]
};
for(var输入数据){
var arr=数据[键];
对于(变量i=0;i
使用
[].unshift()方法

var result = [];
for (var key in data) {
  var arr = data[key];
  for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    for (var prop in obj) {
      if (obj.hasOwnProperty(prop)) {
        result.unshift(prop + ': ' + obj[prop])
      }
    }
  }
}

console.log(result)
var结果=[];
for(var输入数据){
var arr=数据[键];
对于(变量i=0;i
这里是演示

var数据={
例1:[{
名字:“爱丽丝”,
姓氏:“仙境”,
年龄:12
}],
例2:[{
名字:“托马斯”,
姓:“Mathison”,
年龄:14
}],
例3:[{
名字:“大卫”,
姓氏:“雅各布森”,
年龄:18
}]
};
var objectArray=[];
for(var输入数据){
var arr=数据[键];
对于(变量i=0;i}); //现在在数组上迭代,它是按降序排序的
对非基本数据类型的数组(如本例中的自定义对象和数据结构)进行排序需要两个步骤。这很简单,所以请继续

首先,您需要创建一个能够根据所需条件比较自定义数据结构的两个对象的函数

其次,将此决策函数与数组一起提供给排序函数,它将使用它为您排序数组。让我们为您的案例这样做:

首先,比较函数,ab是自定义结构中的对象。返回1表示对象a更大,返回-1表示b更大,返回0表示根据您的标准,两者的“大小”相等。下面if语句的顺序自然很重要,它反映了您描述的优先级:

年龄优先于姓名,姓氏优先于名字

完成,数组排序

在这里,您可以更深入地研究这个概念


祝你好运。

显然问题还不够清楚,人们一直在给你排序算法,我知道这不是你想要的,你想改变属性的内部顺序(这毫无意义,它们没有“顺序”,它们是地图的一部分,在任何情况下,我都会这么做:

var data = {
  example1: [{
    firstName: 'Alice',
    lastName: 'Wonderland',
    age: 12
  }],
  example2: [{
    firstName: 'Thomas',
    lastName: 'Mathison',
    age: 14
  }],
  example3: [{
    firstName: 'David',
    lastName: 'Jacobsen',
    age: 18
  }]
};

for (var key in data) {
  var arr = data[key];
  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    newArr.push({
      age: obj.age,
      firstName: obj.firstName,
      lastName: obj.lastName
    })
  }
  data[key] = newArr;
}
var数据={
例1:[{
名字:“爱丽丝”,
姓氏:“仙境”,
年龄:12
}],
例2:[{
名字:“托马斯”,
姓:“Mathison”,
年龄:14
}],
例3:[{
名字:“大卫”,
姓氏:“雅各布森”,
年龄:18
}]
};
for(var输入数据){
var arr=数据[键];
var newArr=[];
对于(变量i=0;i

但同样,您试图做的事情毫无意义,或者至少根据描述。

内部属性顺序对您来说很重要吗?您应该关心的是元素的顺序,而不是内部结构更新了我的答案demo@ospfranco“没有理由,我只是想用正确的方法学习。”萨利hŞenolŞakarcı谢谢我会检查您的solution@noone432423在我看来,没有正确的方法可以做到这一点,在java中,您有一个OrderedHashMap,
元素的顺序很重要,但您谈论的是对象(阅读
元素
)属性不应该对它们出现的顺序产生任何影响,我相信您的抽象级别需要更高一级。这不是排序元素的问题,如上所述,他关心的是属性的内部顺序,而不是包含属性的元素的顺序。谢谢您的解决方案
data.sort(compare_people); 
var data = {
  example1: [{
    firstName: 'Alice',
    lastName: 'Wonderland',
    age: 12
  }],
  example2: [{
    firstName: 'Thomas',
    lastName: 'Mathison',
    age: 14
  }],
  example3: [{
    firstName: 'David',
    lastName: 'Jacobsen',
    age: 18
  }]
};

for (var key in data) {
  var arr = data[key];
  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    newArr.push({
      age: obj.age,
      firstName: obj.firstName,
      lastName: obj.lastName
    })
  }
  data[key] = newArr;
}