2011-10-11 84 views
0

工作編號:http://jsfiddle.net/sXbRK/的JavaScript:創建新的陣列動態

我有不同的線段,每個人都有自己的ID。我知道哪些是相互交叉的。

現在,我需要將這些重疊線段的ID推入新陣列。

我不關心不相互交叉的線段。

我該如何將彼此交叉的線段ID推送到他們自己的數組中?

// New arrays of overlapping IDs 
e.g. Array A = [1,2,3]; 
    Array B = [7,8,12]; 
    Array C = [14,15]; 

這裏就是我有這麼遠,不要忘記檢查的jsfiddle的工作正在進行代碼:

function cross(ls) 
{ 
    var len = ls.length; 

    for(var a=0; a < len - 1; a++) 
    { 
     for(var b=a+1; b < len; b++) 
     { 
      var A = ls[a], 
       B = ls[b], 
       combine = [], 
       overlappers = []; 

      if 
      (
       (A.start <= B.start && (A.start + A.end) >= B.start) 
       || 
       (A.start <= A.start && (B.start + B.end) >= A.start) 
      ) 
      { 
       // Add overlapping elements to arrays 
       overlappers.push(A.id,B.id); 

       // Create arrays for line segments that overlap each other 
       combine[a] = new Array(overlappers); 
       document.write('Array' + [a] + ' ==> ' + combine[a] + '<br />'); 
      } 
     } 
    } 
} 


// Test data 
var lineSegments = [ 
    {id:'1', start:0, end:50}, 
    {id:'2', start:0, end:50}, 
    {id:'3', start:0, end:50}, 
    {id:'4', start:100, end:50}, 
    {id:'5', start:200, end:50}, 
    {id:'6', start:300, end:50}, 
    {id:'7', start:900, end:50}, 
    {id:'8', start:900, end:50}, 
    {id:'9', start:600, end:50}, 
    {id:'10', start:700, end:50}, 
    {id:'11', start:800, end:50}, 
    {id:'12', start:900, end:50}, 
    {id:'13', start:1000, end:50}, 
    {id:'14', start:1100, end:50}, 
    {id:'15', start:1100, end:50} 
]; 

// Execute function 
cross(lineSegments); 

請一些想法幫助。謝謝!

+0

我不舒爾你的問題是在這裏。你需要幫助確定哪些線路交叉,或者你需要幫助將事物推入數組?你想在陣列中做什麼? – suknic

+0

我想將重疊線段的ID推入一個全新的陣列。新數組只包含那些重疊的線段的ID – JsusSalv

+0

'if(/ *線段重疊* /) { //創建新數組,添加重疊 combine [a] = new Array(overlappers) ; } ' ...類似的東西 – JsusSalv

回答

1

嘗試:

var lineSegments = [ 
    {id:'1', start:0, end:50}, 
    {id:'2', start:0, end:50}, 
    {id:'3', start:0, end:50}, 
    {id:'4', start:100, end:50}, 
    {id:'5', start:200, end:50}, 
    {id:'6', start:300, end:50}, 
    {id:'7', start:900, end:50}, 
    {id:'8', start:900, end:50}, 
    {id:'9', start:600, end:50}, 
    {id:'10', start:700, end:50}, 
    {id:'11', start:800, end:50}, 
    {id:'12', start:900, end:50}, 
    {id:'13', start:1000, end:50}, 
    {id:'14', start:1100, end:50}, 
    {id:'15', start:1100, end:50} 
]; 


function fixSense(line) { 
    if (line.start > line.end) { 
    var t = line.start; 
    line.start = line.end; 
    line.end = t; 
    } 
    return line; 
} 

function getCrossingLines(lines) { 
    var a, b; 
    var overlappers = [], combined = []; 

    // for each line 
    for (var i=0, iLen=lines.length - 1; i<iLen; i++) { 
    a = fixSense(lines[i]); 

    // for every other line 
    for (var j=i+1, jLen=lines.length; j<jLen; j++) { 
     b = fixSense(lines[j]); 

     if ( (a.start <= b.start && a.end >= b.end) || 
      (a.start <= b.start && a.end >= b.end) || 
      (a.start <= b.end && a.end >= b.end)) { 
     overlappers.push(a.id, b.id); 
     combined.push([a.id, b.id]); 
     } 
    } 
    } 

    console.log('combined: ' + combined); 

} 

getCrossingLines(lineSegments); 
+0

喜歡這個:http://jsfiddle.net/sXbRK/2/ ?? 吐出一行上的所有東西。或者我錯誤地複製了某些內容? – JsusSalv

+0

哦,我明白了,所有的疊加器都是組合在一起的,但是並不在他們自己的數組中。好吧,它更近了一步!甜。謝謝。 – JsusSalv

+0

它創建兩個數組,其中一個僅包含id列表,另一個包含數組中的每對數組。警告* combined *數組只是將整個事件顯示爲逗號分隔值,但它實際上是一個由2個成員數組組成的數組。 – RobG