我需要区分数组中的范围,并扩展它。我使用的是JavaScript。
例如:
var arr = ["1", "6", "4", "5", "9-11", "13-15"];并且期望的输出是
var output =["1", "6", "4", "5", "9", "10", "11", "13", "14", "15"];我目前有扩展某个范围的脚本。我在识别数组中的范围时遇到了困难:
var range = "1-6";
range = str.split("-");
start = parseInt(range[0]);
end = parseInt(range[1]);
var rangeArray = [];
for(var i = start; i <= end; i++){
rangeArray.push(i);
}
console.log(rangeArray); 发布于 2017-10-06 15:56:03
尝试这种方法。循环遍历数组并检查项是否包含-符号,如果包含,则拆分它并获取范围。循环遍历范围并将每一项添加到数组中。否则,只需添加该项目。对于这个逻辑,您还可以创建一个helper函数,该函数返回给定范围内的数组,并使用该范围内的原始数组返回concat。
const arr = ["1", "6", "4", "5", "9-11", "13-15"];
let newArray = [];
function getRange(start, count) {
const arr = [];
for(let i = start; i <= count; i++) {
arr.push(i.toString());
}
return arr;
}
arr.forEach(item => {
if(item.includes('-')) {
const [start, end] = item.split('-').map(n => parseInt(n));
newArray = newArray.concat(getRange(start,end));
} else {
newArray.push(item);
}
});
console.log(newArray);
您也可以使用reduce方法来完成此操作
const arr = ["1", "6", "4", "5", "9-11", "13-15"];
function getRange(start, count) {
const arr = [];
for(let i = start; i <= count; i++) {
arr.push(i.toString());
}
return arr;
}
const newArray = arr.reduce( (arr, item) => {
if(item.includes('-')) {
const [start, end] = item.split('-').map(n => parseInt(n));
arr = arr.concat(getRange(start, end));
} else {
arr.push(item);
}
return arr;
}, []);
console.log(newArray);
发布于 2017-10-06 15:58:04
我更新了您的代码,使splitRanges函数返回arange中的所有数字,并循环遍历初始数组,并使用此函数在每次迭代中提取所有范围:
var arr = ["1", "6", "4", "5", "9-11", "13-15"]
function splitRanges(rangeStr) {
var range = rangeStr.split("-");
var start = parseInt(range[0]);
var end = parseInt(range[1]);
var rangeArray = [];
for (var i = start; i <= end; i++) {
rangeArray.push(""+i+"");
}
return rangeArray;
}
var output = [];
arr.forEach(function(r){
if(r.indexOf("-")>-1){
output = output.concat(splitRanges(r));
}else
output.push(r);
});
console.log(output);
说明:
这段代码循环遍历初始数组,并在每次迭代中检查它是否是一个范围,将该值传递给splitRanges函数,并将结果传递给我们的输出数组,否则只需将值push到output数组中。
发布于 2017-10-06 16:04:09
你可以这样做:
let arr = ["1", "6", "4", "5", "9-11", "13-15"];
let out = [];
const range = (start, end) => Array.from({length: (end - start)}, (v, k) => k + start);
arr.forEach(item => {
let splitted = item.split('-');
if(splitted.length > 1) {
out.push(...range(parseInt(splitted[0]), parseInt(splitted[1]) + 1));
} else {
out.push(parseInt(item))
}
})
console.log('out: ', out); // [1, 6, 4, 5, 9, 10, 11, 13, 14, 15]https://stackoverflow.com/questions/46600825
复制相似问题