举例子理解:
ps:最后补充了高级的
问题:
一个数组对象里放了很多个人信息,依照名字首字母排序生成新的数组,两种方法,考虑姓名重复的情况(1、单用sort()自定义函数的简单版本;2、用到forEach()麻烦版本):
模板数据:
const patients = [
{
id: "001",
name: "Alice",
age: 34,
gender: "F",
bloodPressure: {
systolic: 120,
diastolic: 80,
},
hasDiabetes: false,
},
{
id: "002",
name: "Bob",
age: 47,
gender: "M",
bloodPressure: {
systolic: 140,
diastolic: 90,
},
hasDiabetes: true,
},
{
id: "003",
name: "Charlie",
age: 55,
gender: "M",
bloodPressure: {
systolic: 130,
diastolic: 95,
},
hasDiabetes: false,
},
{
id: "004",
name: "Bob",
age: 45,
gender: "M",
bloodPressure: {
systolic: 130,
diastolic: 95,
},
hasDiabetes: false,
},
];
解决方法一:
//存放排好的数组
let arr = [];
//自己写sort()的判断规则
arr = patients.sort(function (a, b) {
if (a.name < b.name) return -1;
else if (a.name > b.name) return 1;
else if (a.name == b.name) return 0;
});
解决方法二:
存入就删掉,防止下一次对照到同名的信息还是上次的
// 放排序后的数组对象
let arr = [];
//存放没排序的名字
let nameArr = [];
newPatients.forEach((item) => {
const { name } = item;
nameArr.push(name);
});
//排序后的名字
let nameArrNew = nameArr.sort();
// 对照查找
nameArrNew.forEach((iname) => {
newPatients.forEach((item, index) => {
const { name } = item;
if (name === iname) {
arr.push(item);
// 存完删掉,防止重名时仍然存入这个数据
newPatients.splice(index, 1);
}
});
});
补充: