【问题标题】:Search Array of Objects From Array of Objects - Javascript [duplicate]从对象数组中搜索对象数组 - Javascript [重复]
【发布时间】:2018-03-25 07:39:20
【问题描述】:

我有两个对象数组:

var objArray1 = [{'name':'abc', 'phone':'0333'}, 
                {'name':'xyz', 'phone':'0334'},
                {'name':'fgfh', 'phone':'0999'},
                {'name':'abc', 'phone':'0666'},
                {'name':'abc', 'phone':'0444'} 
               ]

var objArray2 = [{'name':'abc', 'mobile':'0333'}, 
                {'name':'xyz', 'mobile':'0334'},
                {'name':'fgfh', 'mobile':'0999'} 
               ]

我想从objArray2搜索objArray1的索引电话

如果匹配,我希望将 objArray1对象 推送到 existing 数组中,如果没有匹配则将该对象推送到 joiners 数组中。

这就是我想要做的。

objArray1.forEach(function(item){
    if (objArray2.indexOf(item.phone) < 0) {
        joiners.push(item)
    }else{
        existing.push(item)
    }
})

以上代码无法正常工作,并将objArray1 的所有对象放入连接器中。

当前结果:

joiners = [{'name':'abc', 'phone':'0333'}, 
                {'name':'xyz', 'phone':'0334'},
                {'name':'fgfh', 'phone':'0999'},
                {'name':'abc', 'phone':'0666'},
                {'name':'abc', 'phone':'0444'} 
               ]

想要的结果:

joiners = [{'name':'abc', 'phone':'0666'},
           {'name':'abc', 'phone':'0444'} 
          ]

然后我想检查反之亦然,如果any object of objArray2 不存在于objArray1 中,则制作一组离开者。

【问题讨论】:

  • 请同时添加想要的结果。

标签: javascript arrays


【解决方案1】:

您可以使用Array#some 函数检查是否存在。如果条件满足则返回true,否则返回falseindexOf 是通过比较引用来检查,因为你有不同的对象,你总是会在if 语句中得到false

我对@9​​87654327@函数中的代码做了一些改动

const objArray1 = [
    {'name':'abc', 'phone':'0333'}, 
    {'name':'xyz', 'phone':'0334'},
    {'name':'fgfh', 'phone':'0999'},
    {'name':'abc', 'phone':'0666'},
    {'name':'abc', 'phone':'0444'}];

const objArray2 = [ 
    {'name':'abc', 'mobile':'0333'}, 
    {'name':'xyz', 'mobile':'0334'},
    {'name':'fgfh', 'mobile':'0999'}];
                
const joiners = [];
const existing = [];

objArray1.forEach(item => 
    objArray2.some(i => i.mobile === item.phone) ? 
    joiners.push(item) : existing.push(item));

console.log(joiners);
console.log(existing);

【讨论】:

  • 你知道我要说什么。
  • 对条件进行了微调。根据我的需要。
【解决方案2】:

您可以使用一个哈希表并将其用作推送的条件。

var objArray1 = [{ name: 'abc', phone: '0333' }, { name: 'xyz', phone: '0334' }, { name: 'fgfh', phone: '0999' }, { name: 'abc', phone: '0666' }, { name: 'abc', phone: '0444' }],
    objArray2 = [{ name: 'abc', mobile: '0333' }, { name: 'xyz', mobile: '0334' }, { name: 'fgfh', mobile: '0999' }],
    joiners = [],
    existing = [],
    hash = Object.create(null);

objArray2.forEach(function (item) { hash[item.mobile] = true; });

objArray1.forEach(function(item) {
    (hash[item.phone] ? existing : joiners).push(item);
});

console.log(joiners);
console.log(existing);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 你知道我要说什么。
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2020-04-15
  • 2021-12-16
相关资源
最近更新 更多