在数组中的数组中按升序对名称进行排序
Sort names in ascending order in arrays in an array
例如,当给出一组名称时,
let names = [
[
['firstName', 'Rachel'],
['age', 10],
['gender', 'female'],
],
[
['firstName', 'Sam'],
['lastName', 'Smith'],
['age', 20],
['gender', 'male'],
],
];
输出应类似于以下代码。
let output = nameInOrder(names);
console.log(output); // --> ['Rachel', 'Sam Smith'];
为了让我完成nameInOrder的功能,
function nameInOrder(arr) {
// my code goes here
}
我从 .map
开始将表单更改为数组中的对象 sort(a,b)
和 .map.join(' ')
是否合适?
你会如何按升序对它们进行排序?
您可以使用 .sort()
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/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;
});
.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))
如果源数据真的只能是数组
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);
例如,当给出一组名称时,
let names = [
[
['firstName', 'Rachel'],
['age', 10],
['gender', 'female'],
],
[
['firstName', 'Sam'],
['lastName', 'Smith'],
['age', 20],
['gender', 'male'],
],
];
输出应类似于以下代码。
let output = nameInOrder(names);
console.log(output); // --> ['Rachel', 'Sam Smith'];
为了让我完成nameInOrder的功能,
function nameInOrder(arr) {
// my code goes here
}
我从 .map
开始将表单更改为数组中的对象 sort(a,b)
和 .map.join(' ')
是否合适?
你会如何按升序对它们进行排序?
您可以使用 .sort()
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/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;
});
.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))
如果源数据真的只能是数组
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);