3 回答

TA貢獻1820條經驗 獲得超9個贊
.map方向是正確的。您需要將數據轉換為字符串,然后對它們進行排序。
let people = [
[
['firstName', 'Rachel'],
['age', 10],
['gender', 'female'],
],
[
['firstName', 'Sam'],
['lastName', 'Smith'],
['age', 20],
['gender', 'male'],
],
];
function nameInOrder(arr) {
return arr.map(person => {
const fields = person.map(entry => entry[0])
if (fields.includes('firstName') && fields.includes('lastName')) {
return [
person.find(entry => entry[0] == 'firstName')[1],
person.find(entry => entry[0] == 'lastName')[1],
].join(' ')
} else if (fields.includes('firstName')) {
return person.find(entry => entry[0] == 'firstName')[1]
} else if (fields.includes('lastName')) {
return person.find(entry => entry[1] == 'lastName')[1]
} else {
return ''
}
}).sort()
}
console.log(nameInOrder(people))

TA貢獻1789條經驗 獲得超8個贊
您可以使用.sort()
定義一個函數來比較您傳遞給的名稱.sort()
。
names.sort((a,b) => {
? var nameA = a[0][1].toUpperCase(); // ignore upper and lowercase
? var nameB = b[0][1].toUpperCase(); // ignore upper and lowercase
? if (nameA < nameB) {
? ? return -1;
? }
? if (nameA > nameB) {
? ? return 1;
? }
? // names must be equal
? return 0;
});
請考慮不要像這樣格式化您的數據,請執行以下操作:
let names = [
? [
? ? { 'firstName': 'Rachel' },
? ? { 'age': 10 },
? ? { 'gender': 'female' }
? ]
];
在這種情況下,排序將是類似的,但不依賴于名稱數組中屬性的順序。
names.sort((a,b) => {
? var nameA = a.firstName.toUpperCase(); // ignore upper and lowercase
? var nameB = b.firstName.toUpperCase(); // ignore upper and lowercase
? if (nameA < nameB) {
? ? return -1;
? }
? if (nameA > nameB) {
? ? return 1;
? }
? // names must be equal
? return 0;
});

TA貢獻1799條經驗 獲得超8個贊
如果源數據真的只能是數組。
const names = [
[
['firstName', 'Rachel'],
['age', 10],
['gender', 'female'],
],
[
['firstName', 'Sam'],
['lastName', 'Smith'],
['age', 20],
['gender', 'male'],
],
];
const result = names.map(person => {
const name = person.reduce((obj, [index, value]) => {
obj[index] = value;
return obj;
}, {});
return `${name.firstName || ''} ${name.lastName || ''}`.trim();
});
console.log (result);
添加回答
舉報