Reverse all(codewars习题)字符串反序

Task&Rules:

Give you an array ```arr``` that contains some string elements, reverse all things in the array.

an example:
```
["abc123!@#\n314159","987bbc\n#$%\nxyz886"]
```
Follow the example above, we learning how to reverse every things:

1) reverse array index:
```
["abc123!@#\n314159","987bbc\n#$%\nxyz886"]
to:
["987bbc\n#$%\nxyz886","abc123!@#\n314159"]
```
2) Each element is a string that separated by "\n", reverse it:
```
["987bbc\n#$%\nxyz886","abc123!@#\n314159"]
to
["xyz886\n#$%\n987bbc","314159\nabc123!@#"]
```
3) The splited string may contains three kinds chars: letters, numbers, others. reverse them one by one:
```
["xyz886\n#$%\n987bbc","314159\nabc123!@#"]
to
["zyx688\n%$#\n789cbb","951413\ncba321#@!"]
```
ok, return the result.

根据要求,前面的操作十分简单。首先,将反转数组元素的顺序,然后将每个元素以"\n"分割为数组,反转元素顺序,再按照一定规则进行下一步反转。将字符按照数字、字母及非数字字母的规则,进行最细化的顺序反转。选择replace()方法,将"xyz"、"886"、"!@#"类似的字符串分割为数组然后反转元素顺序。
replace(/[a-zA-Z]*/g, e => e.split('').reverse().join(''))

replace(/[0-9]*/g, e => e.split('').reverse().join(''))
replace(/[^a-zA-Z0-9]*/g, e => e.split('').reverse().join(''))

最终如下代码:

const reverseAll = arr =>
  arr.reverse()
     .map((a)=>a.split('\n')
                .reverse()
                .map((a)=>a.replace(/[a-zA-Z]*/g, e => e.split('').reverse().join(''))
                           .replace(/[0-9]*/g, e => e.split('').reverse().join(''))
                           .replace(/[^a-zA-Z0-9]*/g, e => e.split('').reverse().join('')))
                .join('\n'))

再贴一段他人的代码,从内部开始反转操作。

function reverseAll(arr){
  const regex = /[a-zA-Z]+|[0-9]+|[\W_]+/g
  return arr.map(row =>
    row.split('\n').map(i =>
      i.match(regex).map(r =>
        r.split('').reverse().join('')
      ).join('')
    ).reverse().join('\n')
  ).reverse();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值