在数组中的数组中按升序对名称进行排序

例如,当给出一个名称数组时,


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(' ')?您将如何按升序对它们进行排序?


慕码人2483693
浏览 169回答 3
3回答

温温酱

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

SMILET

您可以使用.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;});

函数式编程

如果源数据真的只能是数组。const names = [&nbsp; [&nbsp; &nbsp; ['firstName', 'Rachel'],&nbsp; &nbsp; ['age', 10],&nbsp; &nbsp; ['gender', 'female'],&nbsp; ],&nbsp; [&nbsp; &nbsp; ['firstName', 'Sam'],&nbsp; &nbsp; ['lastName', 'Smith'],&nbsp; &nbsp; ['age', 20],&nbsp; &nbsp; ['gender', 'male'],&nbsp; ],];const result = names.map(person => {&nbsp; &nbsp; const name = person.reduce((obj, [index, value]) => {&nbsp; &nbsp; &nbsp; &nbsp; obj[index] = value;&nbsp; &nbsp; &nbsp; &nbsp; return obj;&nbsp; &nbsp; &nbsp; }, {});&nbsp; &nbsp; return `${name.firstName || ''} ${name.lastName || ''}`.trim();});console.log (result);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript