Javascript:如何将对象数组转换为具有排序的唯一数组的对象?

2024-04-11

拥有具有这种结构的数据:

$input = [ { animal: 'cat', name: 'Rocky', value: 1 },
           { animal: 'cat', name: 'Spot',  value: 2 },
           { animal: 'dog', name: 'Spot',  value: 3 } ];

需要最快的方法来转换为这种格式:

$output = { animal: [ 'cat', 'dog' ],
            name: [ 'Rocky', 'Spot' ],
            value: [ 1, 2, 3 ] };

输出的键应等于输入中每个对象中的每个键。输出值应该是具有已排序的唯一值的数组。我找到了一些使用嵌套循环来完成此操作的方法,但比我想要的要慢。输入数组有 30,000 个元素,每个对象有 8 个键,我在 Chrome 中能做到的最好成绩是 300 毫秒。希望降低到 100 毫秒。有没有使用map或reduce更快的方法?


现代浏览器的另一种方式:

$input.reduce(function(acc, obj) {
  Object.keys(obj).forEach(function(k) {
    acc[k] = (acc[k] || []).concat(obj[k])
  })
  return acc
},{})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:如何将对象数组转换为具有排序的唯一数组的对象? 的相关文章

随机推荐