作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将字符串拆分为具有定义长度的部分。这意味着如果我有一个像 "1234567890"
这样的给定字符串,并且想将它分成长度为 3
的部分,那么我希望得到结果 ["123", "456”、“789”、“0”]
。为了实现这一点,我在这里找到了一个解决方案:https://stackoverflow.com/a/14349616/2577116
现在,我也想不从开头而是从字符串的末尾开始拆分。预期结果将是 ["1", "234", "567", "890"]
。
因此我使用并修改了上面的解决方案并提出了这个:
function (str, len, reversed) {
//create array from string
var _parts = str.split(""),
_size = Math.ceil(_parts.length/len),
_ret = [],
_offset;
//should give ["123", "456", "789", "0"]
if (!reversed) {
for (var _i=0; _i<_size; _i++) {
_offset = _i * len;
_ret[_i] = _parts.slice(_offset, _offset+len).join("");
}
}
//should give ["1", "234", "567", "890"]
else {
//reverse input
_parts.reverse();
//apply same algorithm as above but don't join yet
for (var _j=0; _j<_size; _j++) {
_offset = _j * len;
_ret[_j] = _parts.slice(_offset, _offset+len);
}
//bring each subitem back to right order, join
_ret.forEach(function (item, i) {
_ret[i] = item.reverse().join("");
});
//reorder items
_ret.reverse();
}
return _ret;
}
这似乎工作得很好。我要求一些更好/简化的解决方案,因为我的感觉有点笨重。
最佳答案
我会做这样的事情:
function foo(str,len,rev) {
var result = [];
if (rev && str.length%len != 0) {
result.push(str.substr(0, str.length % len));
str=str.substr(str.length % len);
}
for (var i=0; i<str.length; i+=len) {
result.push(str.substr(i,len));
}
return result;
}
if 语句将首先检查 reversed 是否为真,如果是,它将在将字符串的长度除以 block 大小时计算其余部分(检查 modulo operation % )。然后使用带有起始位置和长度的函数“substr”来获取列表的第一个元素。
for 循环将遍历字符串“len”个字符,并再次使用函数“substr”将字符串切成长度为“len”的片段,并将它们添加到列表结果中。
关于javascript - 将字符串拆分为定义长度的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31452551/
我是一名优秀的程序员,十分优秀!