在动态数组的对象元素Javascript中查找公共元素

时间:2017-06-29 11:01:41

标签: javascript arrays ecmascript-6

关于这个话题有很多问题,但我找不到直接解决我所遇问题的答案。

这是一个:Find common elements in 1 array using Javascript

第一个区别是我有一个不同类型的数组,它的元素是具有键值对的对象,其中key是字符串,值是整数数组。

第二个区别是数组是动态的意味着有时它可能有零个元素,有时它可能有3个对象元素。

我在下面分享示例数组:

const array = [
  {"key1":[1,2,3]},
  {"key2":[2,3,4]},
  {"key3":[2,5,6]},
];

第三个区别是元素顺序很重要,以便最终结果应该输出所有后续数组中存在的第一个元素的值。

结果应为:

const result = [2];

因为 2 是这三个元素中唯一的常见整数。

如上所述,数组有时可能只有1或2个或没有元素,这些情况应该计算在内。

编辑1 :正如评论中所要求的那样数组的值是唯一的

3 个答案:

答案 0 :(得分:2)

由于值只能在数组中出现一次,因此您可以连接数组,计算出现次数,并过滤那些不等于原始数组长度的数据。

goToDeleteUser(email)
  { console.log(email);
    let confirm = this.alertCtrl.create({
      title: 'Are you sure you want to delete this user ?',
      buttons: [
         { 
           text: 'Delete',
           handler: function(email)  
           {
             console.log(email);
             this.deleteUser(email);
           }
         }
       ]
    });
    confirm.present();

  }
  
deleteUser(email)
  {  console.log(email);
     var userid;
     firebase.database().ref().child('users').orderByChild('email').equalTo(email).on("child_added",(snapshot)=>{
     userid=snapshot.val().uid}) ;
     console.log(userid);
     firebase.database().ref('users/userid').remove();
  }

答案 1 :(得分:0)

您可以首先获取数组中的数组而不使用不同的键,然后查找每个元素(如果它位于另一个数组中)。



let array = [{ key1: [1, 2, 3] }, { key2: [2, 3, 4] }, { key3: [2, 5, 6] }],
    result = array
        .map(o => o[Object.keys(o)[0]] || [])
        .reduce((a, b) => a.filter(c => b.includes(c)));
      
console.log(result);




答案 2 :(得分:0)

const array = [
  {"key1":[1,2,3]},
  {"key2":[2,3,4]},
  {"key3":[2,5,6]},
];

您可以迭代并存储值在每个值的数组中出现的频率:

var common=new Map();
array.forEach(function(obj){
 //var values=new Set(Object.values(obj)[0]);//make unique values out of array
 var values=Object.values(obj)[0];//no need for uniqueness as OP states that they are already unique..
 values.forEach(function(val){
     common.set(val,(common.get(val)||0)+1);
 });
});

现在你有一张包含所有元素及其在主数组中的外观的地图。所以现在你可以简单地比较:

var result=[];
common.forEach(function(appearance,el){
  if(appearance===array.length){
   result.push(el);
  }
});

http://jsbin.com/xuyogahija/edit?console