简体   繁体   English

基于 String 属性对对象数组进行排序

[英]Sorting array of objects based on String property

I have data structure something like this.我有这样的数据结构。

[
        {"name": "John", "gender": "Male", "id": "1"},
        {"name": "Max", "gender": "Male", "id": "2"},
        {"name": "John", "gender": "Male", "id": "3"},
        {"name": "Sam", "gender": "Male", "id": "4"},
        {"name": "Max", "gender": "Male", "id": "5"},
        {"name": "Sam", "gender": "Male", "id": "6"},
        {"name": "Sam", "gender": "Male", "id": "7"},
        {"name": " ", "gender": "Male", "id": "8"},
        {"name": "John", "gender": "Male", "id": "9"},
        {"name": " ", "gender": "Male", "id": "10"},
    ]

I am trying to sort on it based on name property.我正在尝试根据name属性对其进行排序。 I need all the records with name=max should come first followed by name=Sam and then name=John and the remaining records that have empty name field or any other value.我需要name=max的所有记录应该首先出现,然后是name=Sam ,然后是name=John ,其余记录具有空名称字段或任何其他值。

I tried different techniques but didn't get the desired results.我尝试了不同的技术,但没有得到想要的结果。

Can someone suggest to me how I can achieve this?有人可以向我建议如何实现这一目标吗?

Thanks.谢谢。

You can do the following,您可以执行以下操作,

 data = [ {"name": "John", "gender": "Male", "id": "1"}, {"name": "Max", "gender": "Male", "id": "2"}, {"name": "John", "gender": "Male", "id": "3"}, {"name": "Sam", "gender": "Male", "id": "4"}, {"name": "Max", "gender": "Male", "id": "5"}, {"name": "Sam", "gender": "Male", "id": "6"}, {"name": "Sam", "gender": "Male", "id": "7"}, {"name": " ", "gender": "Male", "id": "8"}, {"name": "John", "gender": "Male", "id": "9"}, {"name": " ", "gender": "Male", "id": "10"}, ] data.sort((a, b) => { if(a.name < b.name) { return 1; } else if(a.name > b.name) { return -1; } return 0; }) console.log(data);

You can give scores to each name case, and then use the score in Array.sort function.您可以为每个name案例打分,然后使用Array.sort function 中的分数。

 const data = [ { name: 'John', gender: 'Male', id: '1' }, { name: 'Max', gender: 'Male', id: '2' }, { name: 'John', gender: 'Male', id: '3' }, { name: 'Sam', gender: 'Male', id: '4' }, { name: 'Max', gender: 'Male', id: '5' }, { name: 'Sam', gender: 'Male', id: '6' }, { name: 'Sam', gender: 'Male', id: '7' }, { name: ' ', gender: 'Male', id: '8' }, { name: 'John', gender: 'Male', id: '9' }, { name: ' ', gender: 'Male', id: '10' } ]; const getScore = name => { if (name === 'Max') return 3; else if (name === 'Sam') return 2; else if (name === 'John') return 1; else return 0; }; data.sort((a, b) => getScore(b.name) - getScore(a.name)); console.log(data);

What if your data contains case sensitive name?如果您的数据包含区分大小写的名称怎么办?

const getScore = name => {
  if (name.toLowerCase() === 'max') return 3;
  else if (name.toLowerCase() === 'sam') return 2;
  else if (name.toLowerCase() === 'john') return 1;
  else return 0;
};
data.sort((a, b) => getScore(b.name) - getScore(a.name));
console.log(data);

Hi you can use this code您好,您可以使用此代码

var arr = [
    {"name": "John", "gender": "Male", "id": "1"},
    {"name": "Max", "gender": "Male", "id": "2"},
    {"name": "John", "gender": "Male", "id": "3"},
    {"name": "Sam", "gender": "Male", "id": "4"},
    {"name": "Max", "gender": "Male", "id": "5"},
    {"name": "Sam", "gender": "Male", "id": "6"},
    {"name": "Sam", "gender": "Male", "id": "7"},
    {"name": " ", "gender": "Male", "id": "8"},
    {"name": "John", "gender": "Male", "id": "9"},
    {"name": " ", "gender": "Male", "id": "10"},
];

var arr1 = arr.filter((value, index) => {

    if(value.name == 'Max'){
        return value
    }

});

var arr2 = arr.filter((value, index) => {

    if(value.name != 'Max'){
        return value
    }

});

arr2 = arr2.sort((a, b) => (a.name < b.name) ? 1 : -1);

var output = arr1.concat(arr2);

console.log(output);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM