javascript - 如何根据起始字母过滤数组
问题描述
我正在尝试根据第一个字母获取数组。但我的解决方案不起作用。这是 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']
解决方案
函数可以像这样简单,使用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);
推荐阅读
- c - 如何从不同的机器连接到 Zookeeper 服务器?
- android - 在android中几天后反向地理编码突然返回null
- c# - lambda 表达式的数据类型是什么?
- python - 当我在 pandas 中使用 apply 函数时,它显示“TypeError:必须是字符串,而不是浮点数”
- c++ - TensorFlow C++ 等价于 data.from_generator
- r - 匹配字符串的开头但不以 R 结尾
- sql-server - 如何使用 2 个参考表绑定到多个数据集,如事实表
- java - 为什么 Vaadin 8 ComboBox 添加额外的空项目
- php - WooCommerce 注册不起作用
- swift - 多部分错误:Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength