2013-11-28 132 views
0

我有不同類型的javascript對象,它們都有一個屬性'row'。Javascript get object sequence out of array

var row1 = { 
    row: 1 
}; 

var row2 = { 
    row: 2 
}; 

var row3 = { 
    row: 3 
}; 

var row4 = { 
    row: 4 
}; 

... 

我具有定義如下的數組:

var objArray = []; 

在該陣列中有可能具有多個「行」。序列總是從下排開始到上排。

現在我想獲得彼此相鄰的對象(如連續4個)。在我的情況下,它也可能有3成一排,5排等..

例子:

objArray.push(row0); 
objArray.push(row1); 
objArray.push(row2); 
objArray.push(row3); 
objArray.push(row5); 
objArray.push(row6); 
objArray.push(row7); 
objArray.push(row9); 
objArray.push(row10); 
objArray.push(row12); 

在這種情況下,我需要2所列出,1含0行至3和一個含5至7

我試圖在這的jsfiddle一點:Here我們可以看到控制檯輸出 如果你需要進一步澄清,請詢問。

在此先感謝!

+0

來合併這兩個數組在你的例子中,當然你應該期待4個列表:'0-3','5-7','9-10'和'12'?沒有? – Jamiec

+1

讓我直截了當地說 - 你想從行屬性等於某個值的對象開始,做n個元素的數組切片嗎?或者你想做n個元素的數組塊(那麼爲什麼行屬性應該很重要)? – eithed

+0

@Jamiec:我不需要有對象9,10和12,因爲序列不正確。 – Dieterg

回答

1

我做了一個小提琴,僅僅做到這一點你:

for(var i = 0; i < objArray.length; i++) { 
    if(currentnum !== -1) 
    { 
     var result = objArray[i].row - currentnum; 
     currentnum = objArray[i].row; 
     if(result === 1) 
     { 
     currentarray.push(objArray[i]); 
     } else { 
      arrayofarrays.push(currentarray); 
      currentarray = []; 
      currentarray.push(objArray[i]); 
     } 
    } else { 
     currentnum = objArray[i].row; 
     currentarray.push(objArray[i]); 
    } 
} 
arrayofarrays.push(currentarray); 

http://jsfiddle.net/B76a8/6/

1

既然你已經想通了如何保持計數器和重置爲每個新組,你可以做

var counter = 1, 
    lastIndex = 0; 

//see chrome dev tools, I need to return objects beginning at the 3rd place untill the 7th place in the array 
//how do I get these objects? 
for (var i = 0; i < objArray.length; i++) { 

    if ((i < objArray.length - 1 && objArray[i].row + 1 == objArray[i + 1].row) || 
     (i == objArray.length - 1 && objArray[i - 1].row == objArray[i].row - 1)) { 
     counter++; 
    } else { 
     // here we output the grouped items 
     console.log(objArray.slice(lastIndex, counter+lastIndex)); 
     lastIndex = counter+lastIndex; 
     counter = 1; 
    } 
} 

Demo at http://jsfiddle.net/B76a8/7/

輸出

[對象{行= 0},對象{行= 1}]
[對象{行= 3},對象{行= 4},對象{行= 5},對象{行= 6},對象{行= 7},對象{行= 8}]
[對象{行= 10}]

0

首先,讓我們對數組進行排序:

objArray.sort(function(a,b){ return a.row - b.row });

然後,對於給定的N,這個下一步返回你和以前的元素:

function getElement(array, n) 
{ 
var ret = []; 
for (var i=0; i<array.length; i++) 
    if (array[i].row == n) 
    { 
    if (i > 0) ret.push(array[i-1]); 
    if (i < array.length-1) ret.push(array[i+1]); 
    } 

return ret; 
} 

至於讓所有其他選項用相同的顏色是不同的東西,讓我們做到這一點通過:

function getByColor(array, color) 
{ 
var ret = []; 
for (var i=0; i<array.length; i++) 
    if (array[i].color == color) 
    ret.push(array[i]); 

return ret; 
} 

然後你可以通過使用concat