3 回答

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊
.map是在正確的方向。您需要將數(shù)據(jù)轉(zhuǎn)換為字符串,然后對其進(jìn)行排序。
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貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
您可以使用.sort()
:
定義一個函數(shù)來比較您傳遞給的名稱.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;
});
請考慮不要像這樣格式化您的數(shù)據(jù),請執(zhí)行以下操作:
let names = [
? [
? ? { 'firstName': 'Rachel' },
? ? { 'age': 10 },
? ? { 'gender': 'female' }
? ]
];
在那種情況下,排序?qū)⑹窍嗨频?,但不依賴于名稱數(shù)組中屬性的順序。
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貢獻(xiàn)1807條經(jīng)驗 獲得超9個贊
如果源數(shù)據(jù)真的只能是數(shù)組。
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);
添加回答
舉報