我试图获取一个数组并返回一个仅包含姓氏为“ Smith”的数组的新数组。
我正在尝试对此进行过滤,并且已经尝试了一段时间,但完全没有想法。
请在下面查看我的代码,我知道我已经走了几步,让我知道在哪里可以获得更好的结果?谢谢大家!
const smiths = arr.filter(function(smith) {
let nameSplit = smith.split(' ')
return nameSplit === "Smith"
});
return smiths;
示例:
arr = ['Penelope Smith', 'Charlotte Smither'] returns ['Penelope Smith']
答案 0 :(得分:1)
@slouisa,您几乎拥有它,只是缺少拆分数组的索引。
const lastNameToFilter = "smith";
const smiths = arr.
arr = ['Penelope Smith', 'Charlotte Smither'];
const lastNameToFilter = "Smith".toLowerCase();
const smiths = arr.filter(function(fullname) {
let nameSplit = fullname.split(' ');
let lastNameIndex = 1;
return nameSplit[lastNameIndex].toLowerCase() === lastNameToFilter;
});
console.log(smiths);
filter(function(smith) {
let nameSplit = smith.split(' ');
let lastNameIndex= 1;
return nameSplit[lastNameIndex].toLowerCase() === lastNameToFilter;
});
return smiths;
答案 1 :(得分:1)
您可以使用localeCompare
做这样的事情,以区分大小写等:
var arr = ['Penelope Smith', 'Charlotte Smither', 'John smith']
const smiths = (a, s) => a.filter(x => x.split(' ')[1]
.localeCompare(s, 'en', {sensitivity: 'base'})==0)
console.log(smiths(arr, 'Smith'))
您可以采用的另一种方法是通过endsWith
和toLowerCase
:
var arr = ['Penelope Smith', 'Charlotte Smither', 'John smith', 'Mark DeSmith']
const smiths = (a,s) => a.filter(x =>
x.toLowerCase().endsWith(` ${s.toLowerCase()}`))
console.log(smiths(arr, 'Smith'))
请注意,
endsWith
在IE中不支持