代码之家  ›  专栏  ›  技术社区  ›  Sam Denty zneak

按键对对象数组分组

  •  1
  • Sam Denty zneak  · 技术社区  · 6 年前

    我有一个包含ID的对象数组(非唯一)

    [ { a: 1 }, { a: 1 }, { a: 2 }, { a: 1 }, { a: 1 }, { a: 1 } ]
    

    我尝试按对象的键对对象进行分组,例如:

    [   [{ a: 1 }, { a: 1 }],   [{ a: 2 }],   [{ a: 1 }, { a: 1 }, { a: 1 }]   ]
    

    起初,我想迭代每个对象,递归检查所有以前的键-但由于列表将包含数百个对象,这将是低效的。

    是否有适用于此的内置lodash方法?或者最好的方法是什么

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matt Way    6 年前

    您的问题很难理解,但仅通过单个输入/输出示例(不知道数据的底层结构),您可以执行以下操作:

    var input = [ { a: 1 }, { a: 1 }, { a: 2 }, { a: 1 }, { a: 1 }, { a: 1 } ]
    
    // function that compares equality of your objects
    function matches(a, b){
      return ...
    }
    
    var output = [[input[0]]]
    var cur = output[0]
    for(var i=1; i<input.length; i++){      
      // if the next item doesn't match the previous,
      // create the next sub array
      if(!matches(input[i], input[i-1])){ 
        cur = [input[i]]
        output.push(cur)
      }
      cur.push(input[i])
    }
    

    然而,从您的数据和需求来看,您似乎需要重新考虑您的数据结构。