我有不同类型的javascript对象,它们都有一个属性'row'。
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个包含row0到3,另一个包含5到7个。
我在这个JSFiddle中尝试了一下:Here我们可以看到控制台输出 如果您需要更多说明,请询问。
提前致谢!
答案 0 :(得分: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);
答案 1 :(得分: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;
}
}
演示
<强>输出强>
[Object {row = 0},Object {row = 1}]
[Object {row = 3},Object {row = 4},Object {row = 5},Object {row = 6},Object {row = 7},Object {row = 8}]
[对象{row = 10}]
答案 2 :(得分: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