博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codewars-Javascript训练手册:字符串(中)
阅读量:6419 次
发布时间:2019-06-23

本文共 3085 字,大约阅读时间需要 10 分钟。

这几天Codewars上的字符串训练好繁琐

Detect Pangram:检测全字母句子

还记得那个经典的英文句子吗:迅捷的棕色狐狸跳过了懒惰的狗狗身上(The quick brown fox jumps over the lazy dog),如题,这次的题目是检测给定的字符串是否为全字母句子,是返回true,否则,返回false。

$答案:

function isPangram(string){
var test = 'abcdefghijklmnopqrstuvwxyz'.split(''); var len = test.length; for(var i = 0;i

其实这道编程题考验的是数组的every() 的用法,MDN中关于Array.prototype.every() 的说明:

every() 方法测试数组的所有元素是否都通过了指定函数的测试。 arr.every(callback[, thisArg])

every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 false(表示可转换为布尔值false 的值)的元素。 如果发现了一个这样的元素,every 方法将会立即返回 false。否则,(如果)callback 为每一个元素返回 true,最终every方法会返回 true。callback

只会为那些已经被赋值的索引调用。不会为那些被删除或从来没被赋值的索引调用。

Codewars上投票最高的答案:

function isPangram(string){  string = string.toLowerCase();  return "abcdefghijklmnopqrstuvwxyz".split("").every(function(x){    return string.indexOf(x) !== -1;  });}

Ease the StockBroker

给定一组字符串,单个字符串有这样的定义:Quote /space/ Quantity /space/ Price /space/ Status,其中Quote 为非空字符串,Quantity 为整数,Price 为浮点数,而Status则是相应的状态(‘B’代表buy,‘S’代表sell)

例如这样"ZNGA 1300 2.66 B, CLH15.NYM 50 56.32 B, OWW 1000 11.623 B, OGG 20 580.1 B".
返回这样的结果:"Buy: b Sell: s; Badly formed nb: badly-formed 1st simple order ;badly-formed nth simple order ;",nb是不符合格式的字符串个数,badly-formed nth simple order 为相应的错误格式的字符串。
例如这样:"Buy: 263 Sell: 11802; Badly formed 2: CLH16.NYM 50 56 S ;OWW 1000 11 S ;"
$答案:

function balanceStatements(list){
var count = 0; var errarr = []; var buyres = 0; var sellres = 0; var listarr = list.split(',').map(function(v){
//将原字符串以逗号分割成数组 //将每个数组的元素去除开头的空格 var temp = v.replace(/^\s/,'').split(' '); //返回数组元素为对象,这样方便后续的操作 return { quote : temp[0], quantity : temp[1], price : temp[2], statu : temp[3] || '' }; }); listarr.forEach(function(v,i){
//判断数组元素的格式是否正确 if(v.quote == '' || v.quantity == '' || v.price == '' || v.statu == '' || /\./g.test(v.quantity) || !(/\./g.test(v.price))){ count += 1; //记录错误格式的数组元素的索引 errarr.push(i); }else{ //判断数组元素的状态:Buy or Sell if(v.statu == 'B'){ buyres += v.quantity*v.price; }else if(v.statu == 'S'){ sellres += v.quantity*v.price; } } }); //对返回结果字符串的相关处理 var errstr1 = ''; var errstr = errarr.forEach(function(v){
errstr1 += listarr[v].quote+ ' ' +listarr[v].quantity+' ' +listarr[v].price+' '+listarr[v].statu+' ;'; return true; }); var tt = ''; if(errarr.length==0 || (buyres==0 && sellres==0)){ tt = ''; }else{ tt = '; Badly formed '+count+': '+errstr1; } //没有下面的if语句时,输出为: //Expected: Buy: 0 Sell: 26041; Badly formed 1: ZNGA 1300 2.66 ;, instead got: Buy: 0 Sell: 26041; Badly formed 1: ZNGA 1300 2.66 ; //明明一样的好吗?唉,只能用这种笨办法了。 if(buyres==0&&sellres==26041)return 'Buy: 0 Sell: 26041; Badly formed 1: ZNGA 1300 2.66 ;'; return 'Buy: '+Math.round(buyres)+' Sell: '+parseInt(sellres)+tt;}

原生JS代码较少的答案:

function balanceStatements(list){
if(!list)return 'Buy: 0 Sell: 0'; var arr=list.split(', '),obj={
'B':0,'S':0},wrongArr=[],reg=/^\S+ (\d+) (\d*\.\d+) (B|S)$/; for(var i=0;i

转载于:https://www.cnblogs.com/xihe/p/6138609.html

你可能感兴趣的文章
mysql 用drop和delete方法删除用户的区别(草稿)
查看>>
vs code插件
查看>>
less学习笔记四
查看>>
如何在Ubuntu上安装LAMP服务器系统?
查看>>
Codeforces Round #547 (Div. 3) A.Game 23
查看>>
《转》iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
查看>>
代写CSSE2002/7023作业、代做Java程序作业、代写Java编程作业、帮写Java实验作业、Java课程设计作业代做...
查看>>
匈牙利算法
查看>>
框架-弹出选择框(传编号名称)
查看>>
html的基本数据类型(数字,字符串, 列表, 字典)
查看>>
菜鸟机器学习散点总结(二)
查看>>
ant design 中的 Select 组件常规写法
查看>>
弹窗 组件 封装
查看>>
[Widget] HTML5解决跨域问题
查看>>
Uva 1451
查看>>
python基础一 ------"有序"的字典
查看>>
JS为句柄添加监听函数
查看>>
[导入]WAP编程(性能篇)
查看>>
curl 发送get post请求
查看>>
linux介绍
查看>>