Javascript 使用lodash查找对象数组上的所有重复项

Javascript 使用lodash查找对象数组上的所有重复项,javascript,lodash,Javascript,Lodash,我有以下对象数组: [ { ip: 1, name: 'examplel' }, { ip: 1, name: 'examplel' }, { ip: 202.164.171.184, name: 'example2' }, { ip: 202.164.171.184, name: 'example2' }, { ip: 202.164.171.184, name: 'example3' }, { ip: 127.0.0.1, name: 'example4' }, { ip: 1

我有以下对象数组:

[
 { ip: 1, name: 'examplel' },
 { ip: 1, name: 'examplel' },
 { ip: 202.164.171.184, name: 'example2' },
 { ip: 202.164.171.184, name: 'example2' },
 { ip: 202.164.171.184, name: 'example3' },
 { ip: 127.0.0.1, name: 'example4' },
 { ip: 127.0.0.1, name: 'example5' }
]
如果它们具有相同的
ip
,但不等于
name
,我想给它们加上颜色,比如这样

[
 { ip: 1, name: 'examplel', color: '' },
 { ip: 1, name: 'examplel', color: '' },
 { ip: 202.164.171.184, name: 'example2', color: 'red' },
 { ip: 202.164.171.184, name: 'example2', color: 'red' },
 { ip: 202.164.171.184, name: 'example3', color: 'red' },
 { ip: 127.0.0.1, name: 'example4', color: 'black' },
 { ip: 127.0.0.1, name: 'example5', color: 'black' }
]
如何使用lodash实现这一点?还是香草


编辑:我试图对它进行编码,但它产生了不同的输出

[
 { ip: 1, name: 'examplel', color: 'red' },
 { ip: 1, name: 'examplel', color: 'red' },
 { ip: 202.164.171.184, name: 'example2', color: 'red' },
 { ip: 202.164.171.184, name: 'example2', color: 'red' },
 { ip: 202.164.171.184, name: 'example3', color: 'red' },
 { ip: 127.0.0.1, name: 'example4', color: 'black' },
 { ip: 127.0.0.1, name: 'example5', color: 'black' }
]
这是我的密码

      let list = _.groupBy(data, 'ip')
      const colorList = ['pink', 'blue', 'pink', 'red']
      let logsList = []

      _.keys(list).forEach(key => {
        const color = colorList[Math.floor(Math.random() * colorList.length)]

        if (Array.isArray(list[key])) {
          list[key].forEach(data => {
            data.color = color
            logsList.push(data)
          })
        }
      })
代码中的问题 一个问题可能是在生成随机颜色时:您可以使用颜色两次

固定代码:
let data=[//示例数据
{ip:1,名称:'examplel'},
{ip:1,名称:'examplel'},
{ip:'202.164.171.184',名称:'example2'},
{ip:'202.164.171.184',名称:'example2'},
{ip:'202.164.171.184',名称:'example3'},
{ip:'127.0.0.1',名称:'example4'},
{ip:'127.0.0.1',名称:'example5'}
];
let list=\ u0.groupBy(数据'ip')
const colorList=['pink'、'blue'、'red']//颜色不应在此列表中出现两次!
让logsList=[]
_.key(列表).forEach(key=>{
如果(!colorList.length)抛出新错误(“颜色不够”);
让color=colorList[Math.floor(Math.random()*colorList.length)]//选择颜色
colorList.splice(colorList.indexOf(color),1);//从列表中删除所选颜色
//所以,我们不能选择一种颜色两次
//如果需要,则不需要删除
列表[key].forEach(数据=>{
data.color=颜色
日志列表推送(数据)
})
})
console.log(日志列表)

在设置颜色之前,您可以尝试使用each检查列表[key]的每个元素中的名称和ip是否相同:

let数据=[
{ip:'1',name:'examplel'},
{ip:'1',name:'examplel'},
{ip:'202.164.171.184',名称:'example2'},
{ip:'202.164.171.184',名称:'example2'},
{ip:'202.164.171.184',名称:'example3'},
{ip:'127.0.0.1',名称:'example4'},
{ip:'127.0.0.1',名称:'example5'}
];
let list=\ u0.groupBy(数据'ip')
const colorList=['粉色'、'蓝色'、'粉色'、'红色']
让logsList=[]
log('list:'+JSON.stringify(list));
_.key(列表).forEach(key=>{
if(Array.isArray(list[key])){
让颜色='';
如果(!\每(列表[键]、列表[键][0])){
color=colorList[Math.floor(Math.random()*colorList.length)]
}
列表[key].forEach(数据=>{
data.color=颜色
日志列表推送(数据)
})
}
})
log('logsList:'+JSON.stringify(logsList))

您是如何尝试解决此问题的?
Array.isArray(list[key])
看起来您缺少的主要问题是您没有检查名称是否不同。你只是在给东西涂颜色。你的输出出了什么问题?