首页 > 解决方案 > javascript 从两个匹配列的数组对象中获取不匹配的数据,其中一列包含管道分隔记录

问题描述

我陷入了通过检查主数据来获取记录的逻辑中,如果它存在于一个数组的管道分隔列中,并且不存在于另一个包含数组的主数据中,示例代码如下。如果可以,请提供帮助。

var names = [
    {id:1, name:'Sandra|John', type:'user', username:'sandraJ'},
    {id:2, name:'John', type:'admin', username:'johnny2'},
    {id:3, name:'Peter|John', type:'user', username:'peteJ'},
    {id:4, name:'Bobby', type:'user', username:'be_bob'}
];
var master = [
    {id:1, value:'John'},
    {id:2, value:'Bobby'}
];

Resultant 数组应该是下面的 Result3。

var result3 = [
    {id:1, name:'Sandra'},
    {id:2, name:'Peter'}
];

我尝试了下面的代码,但无法得到结果。

var result = names.filter(function(o1){
                return !master.some(function(o2){
                    return SplitTheString(o1.name) === o2.value;
                });
            });

标签: javascriptjqueryarrays

解决方案


您可以使用String#splitand Array#includes

var result = names.filter(function(o1) {
  return !master.some(function(o2) {
    return o1.name.split('|').includes(o2.value);
  });
});

PS:这是 ES6 版本,只是因为:

let result = names.filter(o1 => !master.some(o2 => o1.name.split('|').includes(o2.value)));

推荐阅读