我有一个包含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方法适用于此?或者什么是最好的方法
答案 0 :(得分:2)
您的问题很难理解,但纯粹是通过您的单个输入/输出示例(不知道数据的基础结构),您可以执行以下操作:
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])
}
但是,根据您的数据和要求,您可能需要重新考虑数据结构。