按键分组对象数组

时间:2018-04-22 01:19:32

标签: javascript lodash

我有一个包含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 个答案:

答案 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])
}

但是,根据您的数据和要求,您可能需要重新考虑数据结构。