Javascript 按键对对象数组进行分组

Javascript 按键对对象数组进行分组,javascript,lodash,Javascript,Lodash,我有一个包含ID的对象数组(非唯一) 我尝试按对象的键对对象进行分组,例如: [ [{ a: 1 }, { a: 1 }], [{ a: 2 }], [{ a: 1 }, { a: 1 }, { a: 1 }] ] 起初我想迭代每个对象,递归地检查所有以前的键——但是由于列表将包含数百个对象,这将是低效的 是否有适用于此的内置lodash方法?或者,最好的方法是什么?您的问题很难理解,但仅通过单个输入/输出示例(不知道数据的底层结构),您可以执行以下操作: var input

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

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

[   [{ a: 1 }, { a: 1 }],   [{ a: 2 }],   [{ a: 1 }, { a: 1 }, { a: 1 }]   ]
起初我想迭代每个对象,递归地检查所有以前的键——但是由于列表将包含数百个对象,这将是低效的


是否有适用于此的内置lodash方法?或者,最好的方法是什么?您的问题很难理解,但仅通过单个输入/输出示例(不知道数据的底层结构),您可以执行以下操作:

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])
}
var-input=[{a:1},{a:1},{a:2},{a:1},{a:1},{a:1}]
//用于比较对象相等性的函数
函数匹配(a,b){
返回。。。
}
变量输出=[[input[0]]]
var cur=输出[0]

对于(var i=1;i <代码> < < /COD> >循环是JS中最有效的迭代器。您需要迭代这些。您可以考虑使用生成函数来生成原始数组中的每个对象以单独处理它们。*必须是FraceBrUV:传统的。.用jsperf自己测量。com@RandyCasburn很对,就是这样。
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])
}