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进行一些 ...
随机推荐
- sqlalchemy 单表增删改查
1.连接数据库,并创建session from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engi ...
- render()到底渲染的什么?
1.格式 render(request,"xx.html",{"xx": xx}) 2.本质 通过模板语言动态渲染字符串(HTML文件) 注意: 1.HTML文 ...
- C++中的四个智能指针
只能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象.智能指针定义在memory头文件中. 1. auto_ptr(C++11已经舍弃) 由new expression获得的对象,在au ...
- 【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中
最近有一个将 mysql 数据导入到 MongoDB 中的需求,打算使用 Kettle 工具实现.本文章记录了数据导入从0到1的过程,最终实现了每秒钟快速导入约 1200 条数据.一起来看吧~ 一.K ...
- 高通量计算框架HTCondor(一)——概述
目录 1. 正文 2. 目录 3. 参考 4. 相关 1. 正文 HTCondor是威斯康星大学麦迪逊分校构建的分布式计算软件和相关技术,用来处理高通量计算(High Throughput Compu ...
- spring.net 基础 1
Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序 1: 在2004年初,Martin Fowler曾经问他网站的读者:当我们谈到控制反转时,"问题是, ...
- 为磁盘文件定义路由(Defining Routes for Disk Files) |对磁盘文件进行路由请求 |
- 关于MySQL5.6配置文件my-default.ini不生效问题
一.问题描述 首先,由于工作要求,需使用MySQL5.6版本(绿色版),从解压到修改root密码,一切都很顺利,但是在我要修改mysql的最大连接数的时候,出现问题了,配置不生效.完蛋.还好有万能的百 ...
- vue响应式原理的实现
响应式实现的原理---如何监控数据的变化:两种方法 Vue 2.x defineProperty(es5) Vue 3.x Proxy(es6) 语法:Object.defineProperty(参数 ...
- Linux下的expect
expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp ...