请教一个数组的算法

存在如下一个object
obj = [{a:1,b:1,c:1},{a:2,b:2,c:2},{a:3,b:3,c:3}]
要转化为
obj = [{a: [1,2,3], b: [1,2,3], c: [1,2,3]}]
请教一下简洁的写法

阅读 2.5k
6 个回答
function transfrom(arr) {
    return arr.reduce((prev, current) => {
      Object.keys(current).forEach(key => prev[key] ? prev[key].push(current[key]) : (prev[key] = [current[key]]))
      return prev
    }, {})
}
obj = [obj.reduce((r,v)=>{for(k in v){(r[k]??=[]).push(v[k])}return r},{})]
const obj = [{a:1,b:1,c:1},{a:2,b:2,c:2},{a:3,b:3,c:3}]

const newObj = [obj.reduce((result, cur) => {
  Object.keys(cur).forEach(key => {
    if (!result[key]) {
      result[key] = [cur[key]]
    } else {
      result[key].push(cur[key])
    }
  })
  return result
}, {})]

image.png

obj = [{a:1,b:1,c:1},{a:2,b:2,c:2},{a:3,b:3,c:3}]
o = {}
res = [o]
JSON.stringify(obj, (k, v) => {v > 0 && (o[k] = (o[k] || []).concat(v)); return v});
res;
obj.reduce((acc,cur)=>(Object.entries(cur).forEach(([key,val])=>(acc[key]||=[]).push(val)),acc),{})

image.png

function transform(arr) {
    var ret = {};
    for (var i = 0; i < arr.length; ++i) {
        for (var key in arr[i]) {
            (ret[key] = ret[key] || []).push(arr[i][key]);
        }
    }
    return [ret];
}
console.dir(transform(obj));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题