鍍金池/ 問答/HTML5  HTML/ js 如何生成不重復(fù)的區(qū)間

js 如何生成不重復(fù)的區(qū)間

例如 定義范圍 1 至 100

隨機(jī)生成 20-50 60-80 等等 按照順序排列 范圍不能疊加

類似于這樣

隨機(jī)產(chǎn)生1-100內(nèi)的范圍

[[6,9],[22,62],[40,23],[74,62],[76,97]]
[[4,9],[22,50],[74,50],[76,88]]

1.相鄰的進(jìn)行合并 例如[22,62]和[74,62]
2.交集的部分被剔除 例如[40,23]

最終得出
[[6,9],[22,74],[76,97]]
[[4,9],[22,74],[76,88]]
并計算除剩余部分的值[[0,6],[9,22],[74,76],[97,100]]

回答
編輯回答
貓小柒

你的需求還不明確,你的幾個到底是幾個區(qū)間?
最終到底要什么輸出?
范圍到底是什么范圍?取值就是[1,100]?

2017年3月30日 10:18
編輯回答
孤島

這個問題。好像不難吧

var obj = {};
var getRandom = (min = 1, max = 100) => {
    return Math.floor(Math.random()*(max-min+1)+min)
}
for(var i=0,il=getRandom(5,10);i<il;i++){
    obj[getRandom()] = true; 
}
var _i = 0;
for(var i in obj){
    console.log(i)
}

出來的不就是邊界值嗎?
2017年5月16日 19:18
編輯回答
純妹
function getRange(n = 3,min = 0,max = 100){
    if(max - min < 2*n-1){
        alert('該范圍有誤,不能產(chǎn)生需要的區(qū)間數(shù)');
        return false;
    }
    //生成 n 個區(qū)間,先生成 2n 個不相等數(shù)
    //[min+1 , max]
    let arr = {},i=0;
    while(i < 2*n){
        let random = Math.floor((max - min + 1)*Math.random());
        if(!arr[random]){
            arr[random] = random;
            i++;
        }
    }
    //排序
    arr = Object.values(arr).sort((a,b)=>a-b);
    let ranges = [],ranges_ = [];
    arr.reduce((a,b,i,arr)=>{
        (i%2 == 0?ranges_:ranges).push([a,b])
        return b;
    },min)
    ranges_.push([arr[arr.length-1],max])
        
    return {ranges_,ranges}
}
//生成3個區(qū)間,總范圍[0,100],區(qū)間范圍[1,100]
getRange();
2017年3月2日 04:45