如何使用不同的对象数组对对象数组进行排序?

问题描述 投票:3回答:1

我在尝试获取一组对象以不同顺序显示时遇到问题。我们应该让输出的显示名称按索引,名字,姓氏和年龄进行排序。当我运行代码时,我只会看到一次显示名称。我已经附上了欲望输出的图片,我有些困惑和受阻。这是我到目前为止的内容:

class Names {

  constructor(first, last, age) {
    this.first = first;
    this.last = last;
    this.age = age;
  }
}

function printObject(allNames, sortType, message) {
  if (sortType == "first") {
    allNames.sort(function(a, b) {
      return a.first.localeCompare(b.first);
    });
  }

  if (sortType == "last") {
    allNames.sort(function(a, b) {
      return a.last.localeCompare(b.last);
    });
  }

  if (sortType == "age") {
    allNames.sort(function(a, b) {
      return a.age - b.age;
    });
  }

  for (let i = 0; i < allNames.length; i++) {
    console.log(message);
    console.log(allNames[i].first + " " + allNames[i].last + " " + allNames[i].age);
  }
}

// main fucntion 
function main() {
    var allNames = [];

    allNames.push(new Names("John", "Doe", 40));
    allNames.push(new Names("Jay", "Thrift", 30));
    allNames.push(new Names("Card", "Ace", 20));

    printObject(allNames, "age", "Message");
}

main();

desire output

javascript es6-class
1个回答
1
投票

您是否只是为了获得所有不同的排序而错过了这些行?

printObject(allNames, "first", "By first name");
printObject(allNames, "last", "By last name");
printObject(allNames, null, "By index");

跟随printObject(allNames, "age", "Message");吗?

((我将更改为printObject(allNames, "age", "By age");


0
投票

您需要移动

console.log(message);

循环外。

class Names {

  constructor(first, last, age) {
    this.first = first;
    this.last = last;
    this.age = age;
  }
}

function printObject(allNames, sortType, message) {
  if (sortType == "first") {
    allNames.sort(function(a, b) {
      return a.first.localeCompare(b.first);
    });
  }

  if (sortType == "last") {
    allNames.sort(function(a, b) {
      return a.last.localeCompare(b.last);
    });
  }

  if (sortType == "age") {
    allNames.sort(function(a, b) {
      return a.age - b.age;
    });
  }

  console.log(message);
  for (let i = 0; i < allNames.length; i++) {
    console.log(allNames[i].first + " " + allNames[i].last + " " + allNames[i].age);
  }
}

// main fucntion 
function main() {
    var allNames = [];

    allNames.push(new Names("John", "Doe", 40));
    allNames.push(new Names("Jay", "Thrift", 30));
    allNames.push(new Names("Card", "Ace", 20));

    printObject(allNames, "age", "Message");
}

main();
© www.soinside.com 2019 - 2024. All rights reserved.