鍍金池/ 問答/HTML/ JS過(guò)濾原始數(shù)據(jù)

JS過(guò)濾原始數(shù)據(jù)

這是一個(gè)多項(xiàng)篩選過(guò)濾數(shù)據(jù)。
AJAX獲取后臺(tái)原始數(shù)據(jù),如下
var arr = [

    {"TrainType": "D", "FromStation": "上海"},
    {"TrainType": "D", "FromStation": "武漢"},
    {"TrainType": "T", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "K", "FromStation": "上海"},
    {"TrainType": "K", "FromStation": "南京"},
    {"TrainType": "Y", "FromStation": "武漢"},
    {"TrainType": "Y", "FromStation": "南京"},
    {"TrainType": "Z", "FromStation": "武漢"},
    {"TrainType": "Z", "FromStation": "上海"},
    {"TrainType": "K", "FromStation": "南京"}
];

前端代碼如下:
<input type="checkbox" data-name="上海">上海
<input type="checkbox" data-name="南京">南京
<input type="checkbox" data-name="武漢">武漢
<br>
<input type="checkbox" >D
<input type="checkbox" >T
<input type="checkbox" >K
<input type="checkbox" >Y
<input type="checkbox" >Z

效果圖:
clipboard.png

需求:第一次點(diǎn)擊上海,把有關(guān)上海的數(shù)據(jù)從原始數(shù)據(jù)曬出來(lái),

   var arr = [
    {"TrainType": "D", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "上海"},
    {"TrainType": "K", "FromStation": "上海"},
    {"TrainType": "Z", "FromStation": "上海"}
];

第二次點(diǎn)擊南京,曬出數(shù)據(jù),

     var arr = [
    {"TrainType": "D", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "上海"},
    {"TrainType": "K", "FromStation": "上海"},
    {"TrainType": "Z", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"}
];

第三次點(diǎn)擊D,曬出數(shù)據(jù),

     var arr = [
    {"TrainType": "D", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "上海"},
    {"TrainType": "K", "FromStation": "上海"},
    {"TrainType": "Z", "FromStation": "上海"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "T", "FromStation": "南京"},
    {"TrainType": "D", "FromStation": "武漢"}
];

以此類推, 取消反之


之有朋友提供過(guò)寫法,
在input上加自定義屬性data-name
 <input type="checkbox" data-name="上海">上海
<input type="checkbox" data-name="南京">南京
<input type="checkbox" data-name="武漢">武漢

JS:
 $("input[type=checkbox]").each(function () {
    $(this).click(function () {
        var myarr = [];
        $("input[type=checkbox]").each(function () {
            if ($(this).is(':checked')) {
                myarr.push($(this).attr('data-name'));
            }
        });
        console.log(filterKey(myarr));
    });
});

function filterKey(myarr) {
    var checkarr = [];
    for (var i in myarr) {
        checkarr = checkarr.concat(arr.filter(function (item) {
            console.log(item);
            return item.FromStation === myarr[i];
        }))
    }
    return checkarr;
}

只能篩選單一數(shù)據(jù)。因?yàn)榉椒╢ilterKey()里面的 return item.FromStation === myarr[i]的FromStation 是變量,現(xiàn)在把它變成key變量
  function filterKey(myarr, key) {
    var checkarr = [];
    for (var i in myarr) {
        checkarr = checkarr.concat(arr.filter(function (item) {
            console.log(item);
            return item[key] === myarr[i];
        }))
    }
    return checkarr;
}

現(xiàn)在代碼
   $("input[type=checkbox]").each(function () {
    $(this).click(function () {
        var myarr = [];
        $("input[type=checkbox]").each(function () {
            if ($(this).is(':checked')) {
                myarr.push($(this).attr('data-name'));
            }
        });
        console.log(filterKey(myarr,key));
    });
});

clipboard.png
這段就不對(duì)了?需要改變。

回答
編輯回答
你的瞳

把var myarr 提成全局變量
就實(shí)現(xiàn)了第一個(gè)顯示一個(gè) 第二次顯示倆個(gè) 依次類推

但是需要判斷 如果取消 那么就在myarr把該元素刪除

Array.prototype.indexOf = function (val) {
    for(var i = 0; i < this.length; i++){
          if(this[i] == val){return i;}
    }
        return -1;
}
Array.prototype.remove = function (val) {
     var index = this.indexOf(val);
     if(index > -1){this.splice(index,1);}
}
你可以利用我這個(gè)封裝

調(diào)用remove($(this).attr('data-name'))
2017年7月29日 18:36