简体   繁体   中英

Problem on returning true or false for each array to compare with one filter array

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)
})

http://jsfiddle.net/2aeuxm56/1/

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM