我有以下对象数组,我想根据实体名称对其进行分组,并且我查看了两个对象是否具有相同的实体名称,如果是,那么如果两个对象的颜色相同,则我必须查看颜色我必须将它们合二为一,并将两者的细节结合起来。
如果两个对象的实体名称相同且颜色不同,那么我必须将它们分组并将颜色设置为黄色,并且必须组合细节并返回新的对象数组。
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"}
]
谁能告诉我我该怎么做
答案 0 :(得分:1)
您可以遍历项目并找到匹配的项目并实现您的逻辑。
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);
答案 1 :(得分:-1)
您可以遍历数据并搜索具有相同名称但颜色不同的项目的索引(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);