Javascript从数组中获取对象序列

Javascript从数组中获取对象序列,javascript,jquery,Javascript,Jquery,我有不同种类的javascript对象,它们都有一个属性“row” var row1 = { row: 1 }; var row2 = { row: 2 }; var row3 = { row: 3 }; var row4 = { row: 4 }; ... 我有一个数组,定义如下: var objArray = []; 在这个数组中,可以有多个“行”。从较低的行到较高的行,顺序始终相同 现在我想得到彼此相邻链接的对象(如一行中的4个)。在我的例子中,

我有不同种类的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);
在本例中,我需要两个列表,一个包含第0行到第3行,另一个包含第5行到第7行

我在这个JSFIDLE中尝试了一些:我们可以看到控制台输出 如果您需要更多的澄清,请询问


提前谢谢

我为你做了一把小提琴:

    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);
for(变量i=0;i

因为您已经知道如何保留计数器并为每个新组重置计数器

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;
    }
}
var计数器=1,
lastIndex=0;
//请参阅chrome开发工具,我需要返回数组中从第3位开始直到第7位的对象
//如何获取这些对象?
for(var i=0;i
演示

输出

[对象{row=0},对象{row=1}]
[Object{row=3},Object{row=4},Object{row=5},Object{row=6},Object{row=7},Object{row=8}]
[对象{row=10}]


首先,让我们对数组进行排序:

objArray.sort(函数(a,b){返回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;
}
函数getElement(数组,n) { var-ret=[]; 对于(var i=0;i0)ret.push(数组[i-1]); 如果(i
由于获得相同颜色的所有其他选项是另一回事,让我们通过以下方式完成:

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;
}
函数getByColor(数组,颜色) { var-ret=[];
对于(var i=0;ii,在您的示例中,您当然应该期望有4个列表:
0-3
5-7
9-10
12
?不?让我直截了当地说吧-您是希望从具有等于特定值的行属性的对象开始,对n个元素进行数组切片,还是希望执行n个元素的数组块(那么为什么行属性很重要)?@Jamiec:我不需要对象9、10和12,因为序列不正确。@EITHEOG:属性不止“行”。每个对象在行中有不同的位置。我需要找到彼此相邻的对象。它们都是“彼此相邻的”第1行的属性行为1,第2行的属性行为2,等等。您试图用此解决的实际问题是什么,因为这样做毫无意义?