繁体   English   中英

根据键对对象数组进行分组并返回新的对象数组

[英]Group array of objects based on a key and return the new array of objects

我有下面的对象数组,我想根据实体名称对其进行分组,并且我查看了两个对象是否具有相同的实体名称,如果是,那么我必须查看颜色,如果两个对象的颜色相同,那么我必须查看将它们合二为一,并结合两者的细节。

如果两个对象的实体名称相同且颜色不同,那么我必须将它们分组并将颜色设置为黄色,并且必须组合细节并返回新的对象数组。

let data = [
    {entityName: "Amazon", color: "red", details: "Hello"}
    {entityName: "Amazon", color: "green", details: "World"}
    {entityName: "Flipkart", color: "green", details: "1234567"} 
]

我上面数组的例外输出应该是这个。

result = [
    {entityName: "Amazon", color: "yellow", details: "Hello world"}
    {entityName: "Flipkart", color: "green", details: "1234567"} 
]

谁能告诉我我该怎么做

您可以遍历项目并找到匹配的项目并实现您的逻辑。

 let data = [{ entityName: "Amazon", color: "red", details: "Hello" }, { entityName: "Amazon", color: "green", details: "World" }, { entityName: "Flipkart", color: "green", details: "1234567" } ]; var result = []; for (const value of data) { const item = result.find(f => f.entityName === value.entityName); if (!item) { result.push(value); } else { if (item.color !== value.color) { item.color = 'yellow'; } item.details += ' ' + value.details; } } console.log(result);

您可以遍历数据并搜索具有相同名称但颜色不同的项目的索引(if 语句检查 indexOfFound >= 0,因为如果未找到项目,则findIndex返回 -1)对项目进行变异,然后删除找到的项目。

所以像这样:

 let data = [{ entityName: "Amazon", color: "red", details: "Hello" }, { entityName: "Amazon", color: "green", details: "World" }, { entityName: "Flipkart", color: "green", details: "1234567" }]; data.forEach(item => { const indexOfFound = data.findIndex(diffItem => diffItem.entityName == item.entityName && diffItem.color !== item.color); if (indexOfFound >= 0) { item.color = "yellow"; item.details = `${item.details} ${data[indexOfFound].details.toLowerCase()}` data.splice(indexOfFound, 1); } }); console.log(data);

暂无
暂无

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

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