function test5(arr) {
let age = arr.sort(function(a, b) {
return Object.fromEntries(a).age - Object.fromEntries(b).age
});
// Arrange by young age. it's work well.
let result = [];
let name = age.filter (function (el) {
if(Array.isArray(age[el])){
result.push(firstName.concat(lastName));
}
return result;
});
return name
}
但是底部函数不起作用。。无法识别"age"数组。。。所以发生了错误。。我不知道为什么。。
我想那样做,
const avengers = [
[
['firstName', 'Captain'],
['lastName', 'Americano'],
['age', 105],
],
[
['firstName', 'Master'],
['lastName', 'Strange'],
['age', 120],
],
[
['firstName', 'IronyMan'],
['age', 55],
]
]
test5(list);
// -> ['IronyMan','Captain Americano', 'Master Strange']
以下是您尝试过的解决方案。
- 首先,我将文件结构重新排列为一个对象数组,其中包含属性firstName、lastName和age
- 然后我按照物体的年龄升序对这个数组进行排序
- 在最后一步中,我在结果数组中推送了名称(名字-姓氏(,并返回了这个结果数组
我检查这个对象中是否存在lastName和firstName属性。因为否则你会得到铁人赛的结果"IronMan undefined";因为他没有姓氏
const avengers = [{
firstName: 'Captain',
lastName: 'Americano',
age: 105,
},
{
firstName: 'Master',
lastName: 'Strange',
age: 120
},
{
firstName: 'IronyMan',
age: 55
}
]
console.log(test5(avengers));
// -> ['IronyMan','Captain Americano', 'Master Strange']
function test5(arr) {
let result = [];
let sortedByAge = arr.sort(compare);
sortedByAge.forEach((x) => {
let name = "";
if(x.firstName !== undefined){
name += x.firstName;
}
if(x.lastName !== undefined){
name += " " + x.lastName;
}
result.push(name)
})
return result;
}
function compare(a, b) {
return a.age - b.age;
}
正如@Alex所指出的,使用sort
(基于年龄(和map
来提取名称。
const process = (data) =>
data
.sort((a, b) => a[a.length - 1][1] - b[b.length - 1][1])
.map((arr) =>
arr
.slice(0, arr.length - 1)
.map(([, name]) => name)
.join(" ")
);
const avengers = [
[
["firstName", "Captain"],
["lastName", "Americano"],
["age", 105],
],
[
["firstName", "Master"],
["lastName", "Strange"],
["age", 120],
],
[
["firstName", "IronyMan"],
["age", 55],
],
];
console.log(process(avengers))