簡體   English   中英

為每個數組返回 true 或 false 以與一個過濾器數組進行比較的問題

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

我需要將一個數組與一組數組(數組數組)進行比較,並在每個具有過濾器值和false所有值的數組上返回true ,如果數組中缺少一個過濾器數組。

我正在使用以下代碼,這肯定不是正確的方法,因為我沒有得到正確的結果

 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>

嘗試

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

您希望看到 arr1 中的每個值都包含在 arr2 中的至少一些數組中。 幸運的是有 JS 函數,不需要 jQuery!

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

您可以使用 lodash 的isEqual方法執行此操作:

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM