我有两个数组。我将其合并并删除重复项。合并是通过考虑数组的所有键来完成的(数组1中对象的所有键值必须与数组2中的键值匹配)。
var result1 = [{
name: 'Sandra',
email: 'sandra@example.com'
},
{
name: 'John',
email: 'johnny@example.com'
},
{
name: 'Peter',
email: 'peter@example.com'
},
{
name: 'Bobby',
email: 'bobby@example.com'
},
{
name: 'Arun',
email: 'arun@gmail.com'
},
];
var result2 = [{
name: 'John',
email: 'johnny@example.com'
},
{
name: 'Bobby',
email: 'bobby@example.com'
},
{
name: 'Arun',
email: 'arun@example.com'
}
];
var result= _.uniqWith(_.concat(result1, result2), _.isEqual)
现在,我需要将合并数组的每个项目与array1和array2的每个项目进行检查,并更新合并数组是否存在。
所以我的最终结果应该是这样的。
var result = [{
name: 'Sandra',
email: 'sandra@example.com',
presentInA: true,
presentInB: false
},
{
name: 'John',
email: 'johnny@example.com',
presentInA: true,
presentInB: true
},
{
name: 'Peter',
email: 'peter@example.com',
presentInA: true,
presentInB: false
},
{
name: 'Bobby',
email: 'bobby@example.com',
presentInA: true,
presentInB: true
},
{
name: 'Arun',
email: 'arun@example.com',
presentInA: false,
presentInB: true
},
{
name: 'Arun',
email: 'arun@gmail.com',
presentInA: true,
presentInB: false
}
];
如何以最好的方式做到这一点?我想可以通过遍历所有3个数组来做到这一点,但这是一个糟糕的方法。
请咨询。
答案 0 :(得分:2)
您可以在result
上方iterate并使用_.some
来检查其中的每个对象是否位于result1
和result2
中(并设置相应的属性presentInA
和presentInB
)。像这样:
_.forEach(result, (obj) => {
let presentInA = _.some(result1, obj);
let presentInB = _.some(result2, obj);
obj.presentInA = presentInA;
obj.presentInB = presentInB;
});
var result1 = [{
name: 'Sandra',
email: 'sandra@example.com'
},
{
name: 'John',
email: 'johnny@example.com'
},
{
name: 'Peter',
email: 'peter@example.com'
},
{
name: 'Bobby',
email: 'bobby@example.com'
},
];
var result2 = [{
name: 'John',
email: 'johnny@example.com'
},
{
name: 'Bobby',
email: 'bobby@example.com'
},
{
name: 'Arun',
email: 'arun@example.com'
}
];
var result = _.uniqWith(_.concat(result1, result2), _.isEqual);
_.forEach(result, (obj) => {
let presentInA = _.some(result1, obj);
let presentInB = _.some(result2, obj);
obj.presentInA = presentInA;
obj.presentInB = presentInB;
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
答案 1 :(得分:2)
您可以这样做
result.map(
per => ({
name: per.name,
email: per.email,
presentInA: _.find(
result1, (o) => o.nombre === per.nombre && o.email === per.email
) ? true : false,
presentInB: _.find(
result2, (o) => o.nombre === per.nombre && o.email === per.email
) ? true : false,
})
)
答案 2 :(得分:1)
您可以使用哈希表查找和合并重复对象:
const { result } = merge(result1, "presentInA").merge(result2, "presentInB");
可以用作:
import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(text)
即O(n),但假定电子邮件中不包含两个@。