返回包含包含特定单词的字符串的新数组

时间:2018-10-09 17:31:23

标签: javascript arrays string

我试图获取一个数组并返回一个仅包含姓氏为“ Smith”的数组的新数组。

我正在尝试对此进行过滤,并且已经尝试了一段时间,但完全没有想法。

请在下面查看我的代码,我知道我已经走了几步,让我知道在哪里可以获得更好的结果?谢谢大家!

const smiths = arr.filter(function(smith) {
  let nameSplit = smith.split(' ')
  return nameSplit === "Smith" 
 });                               
return smiths;

示例:

arr = ['Penelope Smith', 'Charlotte Smither'] returns ['Penelope Smith']

2 个答案:

答案 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'))

您可以采用的另一种方法是通过endsWithtoLowerCase

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中不支持