我有一个包含多个对象的数组,我试图将其添加到另一个包含更多对象的较大数组中。我想知道如何根据每个对象共享的属性自动分配位置。例如:
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属性按照从最小到最旧的顺序将它们排序到数组中。任何帮助表示赞赏。
答案 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