使用filter方法后,返回一个one数组


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))

相关内容

最新更新