gpt4 book ai didi

javascript - 使用 jQuery 的 filter() 函数提取具有不同条件的数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:50:46 26 4
gpt4 key购买 nike

我有一个存储在 javascript 中的基本数据集,我想根据用户选中的复选框对其进行过滤。我知道我可以使用 jQuery 的 filter() 函数根据多个条件过滤结果集,但是我遇到的问题是条件会根据用户输入而改变。

var myArray = [["Adelaide", 2, "yes", "female"],
["Ada", 2, "yes", "female"],
["Amanda", 1, "yes", "female"],
["Wolf", 3, "no", "male"],
["Rhonda", 1, "no", "female"]];

HTML:

<input id="rate-3" name="rating" type="checkbox" value="rate-3" />3 Stars<br />
<input id="rate-2" name="rating" type="checkbox" value="rate-2" />2 Stars<br />
<input id="rate-1" name="rating" type="checkbox" value="rate-1" />1 Star<br />
<a href="#" id="submitform">Submit Filters</a>

如何将多个条件传递给 .filter(function)?例如,有人可能会选择 rate-1 和 rate-3 复选框,这是我目前硬编码要查找的功能,但我希望它根据用户提交的输入灵活。

我想我可以只写一些 if/else 语句,但是有没有更优雅的方法来做到这一点?

JQuery:

$("#submitform").click(function() {
var userSelectedFilters = new Object();

userSelectedFilters.rate3 = $("#rate-3").is(':checked');
userSelectedFilters.rate2 = $("#rate-2").is(':checked');
userSelectedFilters.rate1 = $("#rate-1").is(':checked');

var filteredArray = myArray.filter(
function(el) {
// currently hardcoded
return ((el[1] == 1) || (el[1] == 3));
}
);

});

最佳答案

构建一个数组并检查数组中是否包含该数字:DEMO

$("#submitform").click(function() {
var userSelectedFilters = [];

$("#rate-3").is(':checked') && userSelectedFilters.push(3);
$("#rate-2").is(':checked') && userSelectedFilters.push(2);
$("#rate-1").is(':checked') && userSelectedFilters.push(1);

var filteredArray = myArray.filter(
function(el) {
// currently hardcoded
return userSelectedFilters.indexOf(el[1]) !== -1;
}
);
});

indexOf虽然不是通用的,但有一个垫片:

if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this === void 0 || this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n !== n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n !== 0 && n !== window.Infinity && n !== -window.Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
}
}

关于javascript - 使用 jQuery 的 filter() 函数提取具有不同条件的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com