为了账号安全,请及时绑定邮箱和手机立即绑定

基于复选框过滤对象数组

基于复选框过滤对象数组

喵喵时光机 2021-12-23 14:44:05
您好,我想根据选中的复选框过滤我的数据。我有 3 个复选框。<input type="checkbox" name="shoes" value="shoes" class="storesCheckBox" /><input type="checkbox" name="clothes" value="clothes" class="storesCheckBox" /><input type="checkbox" name="sports" value="sports" class="storesCheckBox" />我的商店数据是// my storesvar 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',        storeSells: "shoes"    }]所以,如果我选中shoes复选框,我想根据 storeType 过滤数据shoes。所以我写了var getStores = stores.filter(function (store) {    return store.storeType === 'shoes';});但是现在,如果我检查clothes并且shoes已经检查。我想过滤shoes + clothes数据。如果我取消选中,shoes我只想过滤衣服数据。它可以是任意数量的复选框,具体取决于商店类型。你能帮我解决这个问题吗?
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

你可以试试这个:


var storeTypesSelected; //array of the types checked

var getStores = stores.filter(function (store) {

    return storeTypesSelected.indexOf(store.storeType) > -1;

});


查看完整回答
反对 回复 2021-12-23
?
慕妹3242003

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" />


查看完整回答
反对 回复 2021-12-23
?
拉风的咖菲猫

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 函数进行过滤。


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号