3 回答

TA貢獻1878條經驗 獲得超4個贊
你可以試試這個:
var storeTypesSelected; //array of the types checked
var getStores = stores.filter(function (store) {
return storeTypesSelected.indexOf(store.storeType) > -1;
});

TA貢獻1824條經驗 獲得超6個贊
從選中的復選框中,構建所選值的數組(或集)。然后,在遍歷數組時,檢查當前storeType是否包含在集合中:
var stores = [{
id: 1,
store: 'Store 1',
storeType: "shoes"
},
{
id: 2,
store: 'Store 2',
storeType: "clothes"
},
{
id: 3,
store: 'Store 3',
storeType: "sports"
},
{
id: 4,
store: 'Store 3',
storeType: "shoes"
}
];
document.addEventListener('change', () => {
const checkedValues = [...document.querySelectorAll('.storesCheckBox')]
.filter(input => input.checked)
.map(input => input.value);
const filteredStores = stores.filter(({ storeType }) => checkedValues.includes(storeType));
console.log(filteredStores);
});
Shoes: <input type="checkbox" name="shoes" value="shoes" class="storesCheckBox" />
Clothes: <input type="checkbox" name="clothes" value="clothes" class="storesCheckBox" />
Sports: <input type="checkbox" name="sports" value="sports" class="storesCheckBox" />

TA貢獻1995條經驗 獲得超2個贊
您只需要在數組中保存用于過濾的復選框值。
var elems = document.getElementsByClassName("storesCheckBox");
var list = [];
for(var i=0; elems[i]; ++i){
if(elems[i].checked){
list.push(elems[i].value);
}
}
var getStores = stores.filter(function (store) {
return list.indexOf(store.storeType) >= 0;
});
return 語句將使用 indexOf 函數進行過濾。
添加回答
舉報