从对象中删除除字母和数字混合以外的所有字符串的数值



我必须调用一个返回对象数组的api:

"supervisors": [
{
"jurisdiction": "u",
"lastName": "Olson",
"firstName": "Karson"
},
{
"jurisdiction": "9",
"lastName": "Heller",
"firstName": "Robbie"
},
{
"jurisdiction": "b",
"lastName": "Cremin",
"firstName": "Elijah"
},
]

主管必须按字母顺序排序,首先是辖区,然后是我的姓,最后是名字。那么数字管辖区应该从回应中删除。

我按字母顺序排序:

supervisorsObj.sort((a, b) => {
a.jurisdiction.toLowerCase().localeCompare(b.jurisdiction.toLowerCase());
});

但是,如果它们都是字符串,我如何删除数字管辖区?

一种选择是使用正则表达式,例如

filtered = data.supervisors.filter(s => !/^d+$/.test(s.jurisdiction))

将只删除完全由数字组成的辖区。

下面的代码片段将首先过滤掉所有数字.jurisdiction条目,并根据管辖权、lastName、firstName:

以不区分大小写的方式对剩余条目进行排序。

const supervisors= [
{
"jurisdiction": "u",
"lastName": "Olson",
"firstName": "Karson"
},
{
"jurisdiction": "9",
"lastName": "Heller",
"firstName": "Robbie"
},
{
"jurisdiction": "b",
"lastName": "Cremin",
"firstName": "Elijah"
},
{
"jurisdiction": "b",
"lastName": "Cremmin",
"firstName": "Elijah"
},
{
"jurisdiction": "b",
"lastName": "Cremin",
"firstName": "Daniel"
},
{
"jurisdiction": "b",
"lastName": "Cremin",
"firstName": "eddie"
}
];
const res=supervisors.filter(s=>isNaN(parseFloat(s.jurisdiction)))
.sort((a,b)=>{
let ab=0;
["jurisdiction","lastName","firstName"].some(p=>ab=a[p].toLowerCase().localeCompare(b[p].toLowerCase()));
return ab;
});
console.log(res);

实际的比较发生在内部.some()循环中。当生成的结果ab不等于零时,循环将停止处理。

相关内容

最新更新