codewars--js--Reverse or rotate?----es6变量,箭头函数,正则取块
问题描述:
对输入的str按照sz个数进行分块,若一块内所有数字的立方和是偶数,则倒序;否则,向左移动一位。然后将修改过的块整合到一个字符串,作为输出。
The input is a string str of digits. Cut the string into chunks (a chunk here is a substring of the initial string) of size sz (ignore the last chunk if its size is less than sz).
If a chunk represents an integer such as the sum of the cubes of its digits is divisible by 2, reverse that chunk; otherwise rotate it to the left by one position. Put together these modified chunks and return the result as a string.
If
szis<= 0or ifstrisemptyreturn ""szis greater(>)than the length ofstrit is impossible to take a chunk of sizeszhence return "".
Examples:
revrot("123456987654", 6) --> "234561876549"
revrot("123456987653", 6) --> "234561356789"
revrot("66443875", 4) --> "44668753"
revrot("66443875", 8) --> "64438756"
revrot("664438769", 8) --> "67834466"
revrot("123456779", 8) --> "23456771"
revrot("", 8) --> ""
revrot("123456779", 0) --> ""
revrot("563000655734469485", 4) --> "0365065073456944"
我的答案
function revrot(str, sz) {
if (sz<=0 || str==null || str.length<sz){
return "";
}else{
var num=parseInt(str.length/sz);
var a=[];b=[];
for(var i=0;i<num;i++){
a[i]=str.substr(sz*i,sz);
var sum=0;
for(var j=0;j<sz;j++){
sum=sum+Math.pow(a[i][j],3);
}
a[i]=sum%2==0?reverse(a[i]):rotate(a[i]);
var b=b.concat(a[i]);
}
return b.join("");
}
}
function reverse(str){
return str.split("").reverse().join("").toString();
}
function rotate(str){
return str.substr(1).concat(str.slice(0,1));
}
优秀答案:
function revrot(str, sz) {
if (sz < 1 || sz > str.length)
return '';
let reverse = s => s.split('').reverse().join('');
let rotate = s => s.slice(1) + s.slice(0, 1);
let sum_cubes = c => c.split('').reduce((a, b) => a + +b ** 3, 0);
return str
.match(new RegExp('.{' + sz + '}', 'g'))
.map(c => sum_cubes(c) % 2 ? rotate(c) : reverse(c))
.join('');
}
优秀答案精彩之处在于使用正则取块。
不过有一点小问题就是在b**2部分,chrome显示Uncaught SyntaxError: Unexpected token **。替换成Math.pow(b,3); 就可以啦。
知识点:
1,es6的定义变量
es6之前用var定义变量,存在诸多问题:
可重复定义变量;无块级作用域;甚至不需要声明就可以使用
es6 之后
let定义变量
const定义常量
2,箭头函数
参考 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001438565969057627e5435793645b7acaee3b6869d1374000
function(x,y){
return x*2;
}
等同于 (x,y) => x*2;
codewars--js--Reverse or rotate?----es6变量,箭头函数,正则取块的更多相关文章
- ES6中箭头函数的作用
我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...
- Es6中箭头函数与普通函数的区别
Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...
- es6变量和函数的提升、暂时性死区?
es6变量和函数的提升.暂时性死区?
- es6的箭头函数和es5的function函数区别
一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...
- ES6 学习 -- 箭头函数(=>)
(1).只有一个参数且只有一句表达式语句的,函数表达式的花括号可以不写let test = a => a; // 只有一个参数a,这里的表达式相当于 "return a" ( ...
- ES6笔记② 箭头函数
特性介绍 箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. //ES5 function fun(x,y){ return x+y; } console.log(fun ...
- 关于es6的箭头函数使用与内部this指向
特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. 'use strcit'; let arr = [1,2,3]; //ES5 let es5 = arr.m ...
- 关于ES6 用箭头函数后的 this 指向问题
最近写完小程序后, 开始学习React, 因为有编译器, 就直接用ES6 新语法了, 中间自然离不开 () => { console.log('箭头函数的this是指向哪的问题')}; var ...
- ES6使用箭头函数注意点
新事物也是有两面性的,箭头函数有他的便捷有他的优点,但是他也有缺点,他的优点是代码简洁,this提前定义,但他的缺点也是这些,比如代码太过简洁,导致不好阅读,this提前定义,导致无法使用JS进行一些 ...
随机推荐
- xlwings excel(一)
python操作Excel的模块,网上提到的模块大致有:xlwings.xlrd.xlwt.openpyxl.pyxll等,他们提供的功能归纳起来有两种:一.用python读写Excel文件,实际上就 ...
- Vim学习之路1
与之前的随笔一样,这个也是记录Vim常用命令以供日后查找所用.对于Vim,简介而又功能强大,学习之后代码书写相当愉快. 1. 保存并退出 :wq 2. 进入标准插入模式退出命令模式 i 3. 退出标准 ...
- 用CSS实现横向滚动条
在进行app制作时,需要使用横向滚动条是内容展示更完善 首先,这是html代码: 这是CSS代码: 要点: 设置显示内容的宽 white-space是防止内容自动折行 overflow-y设置为hid ...
- 'NoneType' object has no attribute shape
使用cv2读取图片时,输出图片形状大小时出现报错“ 'NoneType' object has no attribute shape”,后来排查发现读取图片的返回值image为None, 这就说明图片 ...
- Redhat6.7 切换Centos yum源
转自:http://inlhx.iteye.com/blog/2336729 RedHat 更换Yum源 1.检查yum包 rpm -qa |grep yum 2.删除自带包 rpm -aq | gr ...
- Django设置session过期时间
settings.py #session 设置 SESSION_COOKIE_AGE = 60 * 10 # 设置过期时间10分钟,默认为两周 SESSION_SAVE_EVERY_REQUEST = ...
- Mesh R-CNN 论文翻译(原理部分)
毕设做Mesh R-CNN的实现,在此翻译一下原论文.原论文https://arxiv.org/pdf/1906.02739.pdf. 摘要 二维感知的快速发展使得系统能够准确地检测真实世界图像中的物 ...
- HanLP《自然语言处理入门》笔记--3.二元语法与中文分词
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 3. 二元语法与中文分词 上一章中我们实现了块儿不准的词典分词,词典分词无法消歧. ...
- 缓存 ehcache
只是用于自己记录,防止日后忘记,回看所用 第一步:配置ehcahe 缓存 <?xml version="1.0" encoding="UTF-8"?> ...
- laravel 初学路由简单介绍
文档中的路由详细演示[初学laravel]对应laravel 的框架目录:routes/web.php 路由的格式一:Route::get($uri,$callback); 1.简单的浏览器输出 Ro ...