Javascript从数组中获取对象序列

时间:2013-11-28 11:40:21

标签: javascript jquery

我有不同类型的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我们可以看到控制台输出 如果您需要更多说明,请询问。

提前致谢!

3 个答案:

答案 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);

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

答案 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;
    }
}

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

演示

<强>输出

  

[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

合并两个阵列