通过reduce将对象数组展平为一个对象的数组

use*_*729 0 javascript

我想转换:

[ { foo: 'media' }, { article: 'article' } ]
Run Code Online (Sandbox Code Playgroud)

至:

[{foo: 'media', article: 'article'}]
Run Code Online (Sandbox Code Playgroud)

我试过了 :

var newdata=[ { foo: 'media' }, { article: 'article' } ].reduce(function(p, c, i, array) {   
  return p[Object.keys(c)[0]]=c[Object.keys(c)[0]]
}, {});
Run Code Online (Sandbox Code Playgroud)

但它返回"文章"我做错了吗?

Tim*_*ppe 6

Reduce希望您返回返回的部分结果,以便迭代以下项目.因此,以下代码将起作用:

var newdata=[ { foo: 'media' }, { article: 'article' } ].reduce(function(p, c, i, array) {   
  // Add item to the array
  p[Object.keys(c)[0]]=c[Object.keys(c)[0]];
  // And return back the object to reduce into
  return p;
}, {});
Run Code Online (Sandbox Code Playgroud)

哪个输出:

> newdata
Object {foo: "media", article: "article"}
Run Code Online (Sandbox Code Playgroud)