I need to compare an array with a group of arrays (Array of Array) and return true
on each array that have all values of filter value and false
if even one of filter array is missing in the arrays.
I am using the following code which for sure is not correct way to do this as I am not getting proper result
let selected = []; let filter = ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3']; let data = [ ['item-0', 'item-112', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-12', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-31'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3', 'item-3', 'item-3'] ]; function checkfilter(arr1, arr2) { for (let i = 0; i < arr1.length; i++) { for (let j = 0; j < arr2.length; j++) { if(arr2[j].includes(arr1[i])){ selected.push('1'); } else{ selected.push('0'); } } } } checkfilter(filter, data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
try
data.map(a=> filter.every(f=>a.includes(f)));
let selected = []; let filter = ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3']; let data = [ ['item-0', 'item-112', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-12', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-31'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3', 'item-3', 'item-3'] ]; function checkfilter(filter, data) { return data.map(a=> filter.every(f=>a.includes(f))); } console.log(checkfilter(filter, data) );
You are looking to see that every value in arr1 is included in at least some arrays in arr2. Luckily there are JS functions for that, no jQuery necessary!
let selected = []; let filter = ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3']; let data = [ ['item-0', 'item-112', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-12', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-31'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3'], ['item-1', 'item-2', 'item-4', 'item-5', 'item-7', 'item-8', 'item-3', 'item-3', 'item-3', 'item-3'] ]; function checkfilter(arr1, arr2) { return arr1.every(function(c) { return arr2.some(function(a) { return a.includes(c); }); }); } console.log(checkfilter(filter, data));
You can do this with isEqual method of lodash :
let isFilterExist = false;
data.map(a => {
// Do Whatever You need To do based on the condition
if (_.isEqual(a, filter)) {
isFilterExist = true;
}
console.log(isFilterExist)
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.