首页 > 解决方案 > 如何根据起始字母过滤数组

问题描述

我正在尝试根据第一个字母获取数组。但我的解决方案不起作用。这是 repl 链接:https ://repl.it/@Huu_TruongTruon/ProbableSandyDistributeddatabase `

const firstLetter = (el, letter) => {
  for (let i = 0; i < el.length; i++) {
    if (el[i][0] === letter) {
      return true
    }
    return false;
  }
}

const filter = (array, letter, callback) => {
  for (let i = 0; i < array.length; i++) {
    var newArr = []
    if (callback) {
      newArr.push(array[i])
    }
    return newArr;
  }
}

//uncomment below to test your work
const suppliesArray = ['pencils', 'brush', 'paint', 'clay', 'easel', 'crayons',
  'acrylic', 'glue', 'paper', 'marble', 'water colors'
];
const projectLetter = 'p';
console.log(filter(suppliesArray, projectLetter, firstLetter));

这个结果应该记录['pencils', 'paint', 'paper']

标签: javascriptarrays

解决方案


函数可以像这样简单,使用Array.prototype.filter()and String.prototype.startsWith()

const filter = (array, letter) => array.filter(s => s.startsWith(letter));

完整片段:

const filter = (array, letter) => array.filter(s => s.startsWith(letter));

const suppliesArray = ['pencils', 'brush', 'paint', 'clay', 'easel', 'crayons',
  'acrylic', 'glue', 'paper', 'marble', 'water colors'];
  
const result = filter(suppliesArray, 'p');

console.log(result);


不使用本机filter()功能:

const filter = (array, letter) => array.reduce((a, s) => s.startsWith(letter) ? [...a, s] : a, []);

const suppliesArray = ['pencils', 'brush', 'paint', 'clay', 'easel', 'crayons',
  'acrylic', 'glue', 'paper', 'marble', 'water colors'];
  
const result = filter(suppliesArray, 'p');

console.log(result);


推荐阅读