繁体   English   中英

合并JavaScript中相同长度的多个对象数组

[英]Merging multiple arrays of objects of the same length in JavaScript

这是我需要合并的数组的示例

const urls = [{url:"http:/..."},{url:"http:/..."},{url:"http:/..."}]; 
const images = [{image:"..."},{image:"..."},{image:"..."}];

const merged = [{url:"http:/...", image:"..."},{url:"http:/...", image:"..."},{url:"http:/...", image:"..."}]

我已经尝试过Object.assign({},urls,images)。 最终只能删除该实例中的url,因为它不会进行深度复制。 数组中每个对象的键都相同!

如果您确定它们大小相等,则可以使用Array.prototype.map方法遍历其中之一。 实际上,如果要以更通用的方式合并对象,则应使用Object.assign

 const urls = [{url:"http:/..."},{url:"http:/..."},{url:"http:/..."}]; const images = [{image:"..."},{image:"..."},{image:"..."}]; const results = urls.map((url, index) => Object.assign({}, url, images[index]) ); console.log(results) 

ES6

您可以使用ES6代替Object.assign。

const results = urls.map((url, index) => 
  ({...url, ...images[index]})
);

您可以map一个数组,并使用索引获取另一个数组的项:

 const urls = [{url:"http:/0..."},{url:"http:/1..."},{url:"http:/2..."}]; const images = [{image:"0..."},{image:"1..."},{image:"2..."}]; const newArray = urls.map((url, i) => ({...url, ...images[i] }) ) console.log(newArray) 

或者您可以像这样使用Array.from

 const urls = [{url:"http:/0..."},{url:"http:/1..."},{url:"http:/2..."}], images = [{image:"0..."},{image:"1..."},{image:"2..."}]; const length = urls.length const newArray = Array.from({ length }, (_, i) => ({ ...urls[i], ...images[i] }) ) console.log(newArray) 

您可以使用Array.prototype.map遍历一个数组,并使用提供给回调函数的索引,在另一个数组中获取相应的值。

这是一个例子:

 const urls = [{url:"http:/..."},{url:"http:/..."},{url:"http:/..."}]; const images = [{image:"..."},{image:"..."},{image:"..."}]; console.log(urls.map((t, id) => ({ image: images[id].image, url: t.url }))); 

在这里,传递给回调函数的参数是turls数组中的项, idturls数组中的索引。

您可以减少数组并将对象分配给具有相同索引的对象。

这适用于任意数量的数组。

 const urls = [{url:"http:/..."}, { url: "http:/..." }, { url: "http:/..." }], images = [{ image: "..." }, { image: "..." }, { image: "..." }], result = [urls, images] .reduce((r, a) => ( a.forEach((o, i) => Object.assign(r[i] = r[i] || {}, o)), r ), []); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM