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