使用对象属性值组合包含对象的多个数组

时间:2014-07-18 19:25:28

标签: javascript

我有一个包含多个对象的数组,我试图将其添加到另一个包含更多对象的较大数组中。我想知道如何根据每个对象共享的属性自动分配位置。例如:

function person(name, age) {
this.name = name;
this.age = age;
}

function pet(name, age) {
this.name = name;
this.age = age;
}

var person1 = new person("Amanda", 25);
var person2 = new person("Jack", 29);
var pet1 = new pet("Fluffy", 4);
var pet2 = new pet("Spaz", 5);

personArray = [person1, person2];
petArray = [pet1, pet2];

在示例中,我想将personArray和petArray组合成一个新数组,使用每个属性的age属性按照从最小到最旧的顺序将它们排序到数组中。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

concat()sort()会帮助您:

var mixedArray = personArray.concat(petArray).sort(
  function (a, b) {
    return a.age - b.age;
  }
);

结果:

[
  {
    "name": "Fluffy",
    "age": 4
  },
  {
    "name": "Spaz",
    "age": 5
  },
  {
    "name": "Amanda",
    "age": 25
  },
  {
    "name": "Jack",
    "age": 29
  }
] 

答案 1 :(得分:0)

您可以将Array.sort与自定义比较器功能结合使用:

var mixedSortedArray = personArray.concat(petArray).sort(function(a, b) {
    return a.age - b.age;
});

答案 2 :(得分:0)

您可以使用内置的Array.sort功能轻松完成此操作。您只需要检查对象具有哪些属性,然后检查年龄。在您的示例中,您的对象与MDN上的示例非常相似:

var items = [
  { name: "Edward", age: 21 },
  { name: "Sharpe", age: 37 },
  { name: "And", age: 45 },
  { name: "The", age: 12 },
  { name: "Magnetic" },
  { name: "Zeros", age: 37 }
];
items.sort(function (a, b) {
    if (a.name > b.name)
      return 1;
    if (a.name < b.name)
      return -1;
    // a must be equal to b
    return 0;
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort