gpt4 book ai didi

javascript - lodash 中的独特联合

转载 作者:行者123 更新时间:2023-11-30 05:50:11 26 4
gpt4 key购买 nike

我有两种收藏:

fieldMappingViewModel.MappedFields():

[
{ "EmailField" : "FirstName", "CrmField" : "FirstName" },
{ "EmailField" : "LastName", "CrmField" : "LastName" },
{ "EmailField" : "Job", "CrmField" : "JobTitle" }...
]

_全部:

[
{ "EmailField" : "FirstName", "CrmField" : null },
{ "EmailField" : "LastName", "CrmField" : "LastName" },
{ "EmailField" : "Job", "CrmField" : "JobTitle" }...
]

我正在尝试使用以下方法创建这两者的独特结合:

fieldMappingViewModel.allMappings(_.uniq(_.union(fieldMappingViewModel.MappedFields(), _all),
function (item, key) {
// not the ones that their item.EmailField() already exists with a CrmField value
}));

当然,严格相等性仍然会保留在具有重复电子邮件字段但其 CrmField 不同的结果对象中。

如何从我的最终结果中删除带有 CrmField: Null 的那些?(我只想过滤掉它们的非空对存在的那些空值。否则我想保留其中有空值的对)

所以我不会结束

{ "EmailField" : "FirstName", "CrmField" : "FirstName" }

{ "EmailField" : "FirstName", "CrmField" : null }

两者都在最终结果中。但只有:

{ "EmailField" : "FirstName", "CrmField" : "FirstName" }

最佳答案

我的理由是你需要一个函数来:

{ "EmailField" : "FirstName", "CrmField" : "FirstName" }

{ "EmailField" : "FirstName", "CrmField" : null }

相同的值,因此 uniq 操作只会选择其中一个,但是取决于哪个先出现,您最终可能会选择其中一个。就 uniq 而言,唯一的另一种方法是区分它们,在这种情况下,你最终会得到你不想要的两者。

我建议你使用一个过滤操作来删除 uniq 之后的空值。

一种可能的解决方案,尽管由于函数的广泛使用可能不是最好的解决方案是:

var arr1 = 
[
{ "EmailField" : "FirstName", "CrmField" : null },
{ "EmailField" : "LastName", "CrmField" : "LastName" },
{ "EmailField" : "Job", "CrmField" : "JobTitle" }
];

var arr2 =
[
{ "EmailField" : "FirstName", "CrmField" : "FirstName" },
{ "EmailField" : "LastName", "CrmField" : "LastName" },
{ "EmailField" : "Job", "CrmField" : "JobTitle" },
];

var res = _.flatten(_.map(_.groupBy(_.union(arr1, arr2), function (item) {
return item.EmailField;
}), function (set) {
if (set.length > 1) {
return _.filter(_.uniq(set, function (item) {
return item.EmailField + ' ' + item.CrmField;
}), function (item) {
return item.CrmField != null;
});
}
return set;
}));

console.log(res);

uniq 操作被 groupBy 取代,然后我们使用 map 和 filter 来清除空值,这一次考虑到我们有多少这个 EmailField 的实例——如果只有一个我们保留它。最后,我们使用展平再次获得单个对象数组。

关于javascript - lodash 中的独特联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com