【发布时间】:2019-06-26 22:41:48
【问题描述】:
考虑以下字符串:7, 20, 22, 30–32, 33, 36–40, 46
我开发了一些代码,它会自动将所述字符串解析为具有给定范围的数组,如下所示。
注意:一个典型的用例是 - 在一个包含 100 页的 pdf 中搜索选定的页面
var number_string = "7, 20, 22, 30–32, 33, 36–40, 46".toString().replace(/–/gi, '-').replace(/ /gi, '').split(',');
var new_arr = [];
$.each(number_string, function(index, value) {
if (value.match(/-/gi)) {
var range_arr = value.split('-');
var sub_arr = range(range_arr[0], range_arr[1]);
$.each(sub_arr, function(sub_index, sub_value) {
new_arr.push(parseInt(sub_value, 10));
});
} else {
new_arr.push(parseInt(value, 10));
}
});
console.log(new_arr);
function range(lowEnd, highEnd) {
var arr = [],
c = highEnd - lowEnd + 1;
while (c--) {
arr[c] = highEnd--
}
return arr;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
是否有一种更精简的非 jQuery 方法可以在这里使用,而且简单、重量轻且易于阅读?请不要使用 ES6 的东西,因为这对我来说是希腊语。
注意:ToInt 函数只是一个返回有效数字或 0 的函数。
【问题讨论】:
-
我看到你只使用
each函数形式的jQuery。你可以改用for of。 -
所以,是的,
ToInt...呵呵 有什么理由不喜欢parseInt(val, 10)? -
如果 ES6 是希腊语,jQuery 是 Pig Latin。
-
首先,由于这是您想要改进的工作代码,您应该在Code Review 提出这个问题(他们是关于改进代码,我们是关于生成创建工作代码)。第二:如果“ES6 的东西……对 [你] 来说是希腊语” 认为这是学习 ES6 的机会和理由(ECMAScript 目前似乎在每年更新一次,具体取决于浏览器实施;如果你推迟它,它不会变得更容易学习)。
-
@Certain:鉴于问题似乎是“此代码有效,如何改进”我写了该建议以产生与问题中产生的最终结果相同的最终结果。鉴于我们都 - 明确 - 做出假设,OP需要澄清。
标签: javascript jquery arrays