How to find objects that are in multiple arrays using jQuery

I have five arrays that can contain the same value.

var arr1 = ['1','2','3','4'];
var arr2 = ['1','3']
var arr3 = ['1','2','3']
var arr4 = ['1','2','3','4','5'];
var arr5 = ['1','3','4']

How can I find all numbers that are in all arrays using jQuery?

Are numbers 1and 3found in all arrays?

+4
source share
4 answers

check this

Filter an array using duplicate elements

JsFiddle http://jsfiddle.net/nWjcp/87/

var arr1 = ['1','2','3','4'];
var arr2 = ['1','3']
var arr3 = ['1','2','3']
var arr4 = ['1','2','3','4','5'];
var arr5 = ['1','3','4']

var arrays = [
   arr1,arr2,arr3,arr4,arr5
    ];


var result = arrays.shift().filter(function(v) { // Filtering
    return arrays.every(function(a) {       // Seek duplicate
        return a.indexOf(v) !== -1;    
    });
});




   alert( JSON.stringify(result,null,4) ); // ['1','3']
+3
source

First of all, make a more manageable dataset:

var arrays = [
    ['1', '2', '3', '4'],
    ['1', '3'],
    ['1', '2', '3'],
    ['1', '2', '3', '4', '5'],
    ['1', '3', '4']
];

Then we want to get all the unique elements:

var elements = [].concat.apply([], arrays).filter(function(value, index, self) {
    return self.indexOf(value) === index;
}); //["1", "2", "3", "4", "5"]

, , , , :

var out = elements.filter(function(item) {
    return arrays.reduce(function(present, array) {
        present = present && (array.indexOf(item) !== -1);
        return present;
    }, true);
}); //["1", "3"]
+2

crossbrowser:

Here's a simple solution without any "extra" features that do not contain the jquery ( every, inArray, filter(of array)):

var arr1 = ['1','2','3','4'];
var arr2 = ['1','3']
var arr3 = ['1','2','3']
var arr4 = ['1','2','3','4','5'];
var arr5 = ['1','3','4']

var arrs = [arr1,arr2,arr3,arr4,arr5];

var obj={};

$.each(arrs,function (i,arr){
     $.each(arr,function (j,n){
      obj[n]=(+obj[n] || 0) + 1;
     });
});


for (item in obj) 
{  
     if(obj.hasOwnProperty(item ) && obj[item]==arrs.length) console.log(item) //1,3
}
+1
source

Find a long solution here. First, find the array with the smallest elements so that you can optimize the search:

var arr1 = ['1','2','3','4'];
var arr2 = ['1','3', '8'];
var arr3 = ['1','2','3'];
var arr4 = ['1','2','3','4','5'];
var arr5 = ['1','3','4'];

var arrayOfArray = [arr1, arr2, arr3, arr4, arr5];
var arrayWithMin = null;
var outputArray = [];
$.each(arrayOfArray, function(index, arrayItem) {
    arrayWithMin = (arrayWithMin == null) ? arrayItem : (arrayWithMin.length > arrayItem.length ? arrayItem : arrayWithMin);
});

$.each(arrayWithMin, function(i, searchItem) {
    if($.inArray(searchItem, arr1) > -1 
       && $.inArray(searchItem, arr2) > -1 
       && $.inArray(searchItem, arr3) > -1 
       && $.inArray(searchItem, arr4) > -1
       && $.inArray(searchItem, arr5) > -1) {
        outputArray.push(searchItem);
    }
});

document.write(outputArray.join(', '));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Run code
0
source

Source: https://habr.com/ru/post/1608716/


All Articles