我的代码有问题。我有一系列的字符串。例如,我写了这个:
var a = 12345678
我想将这些字符串拆分成一个数组,使其产生类似以下的内容:
[12,23,34,45,56,67,78]
我已经尝试过这段代码:
var newNum = a.toString().match(/.{1,2}/g)
它返回了这个结果而不是我想要的结果
[12,34,56,78]
有没有解决方案?谢谢提前。
我的代码有问题。我有一系列的字符串。例如,我写了这个:
var a = 12345678
[12,23,34,45,56,67,78]
var newNum = a.toString().match(/.{1,2}/g)
它返回了这个结果而不是我想要的结果
[12,34,56,78]
最短的方法:
'abcdefg'.split(/(..)/g).filter(s => s);
// Array(4) [ "ab", "cd", "ef", "g" ]
解释: split(/(..)/g)
将字符串每两个字符分割一次(大致如此),我理解是任意两个字符的捕获组 (..)
在此作为顺序预查(出于我不知道的原因;如果有人有解释,欢迎对本答案进行贡献)。这将产生Array(7) [ "", "ab", "", "cd", "", "ef", "g" ]
,所以只要用filter(s => s)
筛选掉空子字符串即可。
'abcdefg'.match(/(..)/g)
是一个更短的版本,但这不是Mohammand所要求的。 - luvejoArray.from()
:
let str = "12345678",
length = str.length - 1,
output = Array.from({ length }, (_,i) => +str.slice(i, i+2))
console.log(output)
function getChunks(number, size) {
let str = number.toString(),
length = str.length - size + 1;
return Array.from({ length }, (_,i) => +str.slice(i, i + size))
}
console.log(getChunks(12345, 3))
console.log(getChunks(12345678, 2))
Array.from({ length }, (_,i) => +str.slice(i, i+2))
- Sizzling CodeArray.reduce
来实现:
ele
与下一个元素。+
并将其添加到累加器数组中来将其转换回数字。var a = 12345678;
const result = a.toString().split("").reduce((acc, ele, idx, arr) => {
return arr[idx + 1] ? acc.concat(+(ele + arr[idx + 1])) : acc;
}, []);
console.log(result);
console.assert(result, [12,23,34,45,56,67,78]);
这个模式是以前两位数字(12)开始,然后每次加十一,直到你得到一个以输入字符串的最后一位数字(8)结尾的数组。
let str = `12345678`;
const eleven = string => {
let result = [];
let singles = string.split('');
let first = Number(singles.splice(0, 2).join(''));
for (let i = 0; i < string.length-1; i++) {
let next = 11 * i;
result.push(first+next);
}
return result;
}
console.log(eleven(str));
const arr = 12345678;
const group = a => group_aux(`${a}`);
const group_aux = ([f, s, ...r]) =>
!s ? [] : [+(f+s), ...group_aux([s, ...r])];
console.log(group(arr));
我的要求是将一个长度为32的MD5字符串转换为长度为16的Uint8Array,作为AES算法的密钥。感谢上面帖子的参考。
var a = 'a12ab32fd78a89efa12ab32fd78a89ef';
var arr=[];
for (var i =0; i<a.length-1; i+=2) {
arr.push(parseInt(a[i]+''+a[i+1], 16));
}
console.log(arr.length);
console.log(arr);
console.log(new Uint8Array(arr));
如果顺序不重要,一个更易读的解决方案是:
let even = '12345678'.match(/(..)/g)
let odd = '2345678'.match(/(..)/g)
let result = [...even, ...odd]
.sort()
:result.sort()
另一种方法是使用reduce
var a = 12345678
a.toString()
.split('')
.reduce((c,x,i,A)=>i>0?c.concat([A[i-1]+A[i]]):c,[])
var a = 12345678;
console.log(
String(a)
.split("")
.map((value, index, array) => [value, array[index + 1]].join(''))
.map(item => Number(item))
);
output - [ 12, 23, 34, 45, 56, 67, 78, 8 ]
解释
.map((value, index, array) => [value, array[index + 1]] ...
对于数组中的每个项目,取当前值和下一个值,并将它们放入数组单元格中
.join('')) - 然后从这个数组值创建字符串,如此 [ '1', '2' ] => ['12']
.map(item => Number(item)) - 最后,将每个数组项转换为数字。
for
循环或数组处理方法开始。仅使用正则表达式无法完成此操作。 - charlietfl