Javascript jquery动态if条件
我有: 然后: 所以我需要找到数据has((a=1)和(b=1或b=2)): 一切都很好,但现在我需要的工作动态数据,关键字,我不能这样做 试试看Javascript jquery动态if条件,javascript,jquery,Javascript,Jquery,我有: 然后: 所以我需要找到数据has((a=1)和(b=1或b=2)): 一切都很好,但现在我需要的工作动态数据,关键字,我不能这样做 试试看 filteredData = $.grep(data, function (value, i) { if (value[keywords[0][0].key] !== keywords[0][0].value) return false; if (value[keywords[1][0].key] !== ke
filteredData = $.grep(data, function (value, i) {
if (value[keywords[0][0].key] !== keywords[0][0].value) return false;
if (value[keywords[1][0].key] !== keywords[1][0].value) && (value[keywords[1][1].key] !== keywords[1][1].value)return false;
return true;
});
演示:
对于IE<9的支持,您可能需要包括
filteredData=$.grep(数据,函数(值,i){
for(var k=0;k
jQuery很棒,但它不是所有问题的答案,对于这种特殊情况,只需使用好的普通Javascript即可:
filteredData = $.grep(data, function(value, i) {
for (var k = 0; k < keywords.length; k++) {
var matched = false;
var orlist = keywords[k];
for (var l = 0; l < orlist.length; l++) {
if (value[orlist[l].key] == orlist[l].value) {
matched = true;
break;
}
if (!matched) {
return false;
}
}
return true;
});
这只是供将来参考,是使用jQuery的正确答案。@Mehran Hatami thanksI喜欢这样,而不是我的答案。:@Arun p Johny让我检查一下。@Arun p Johny我该如何(下载和下载)包括Pollyfills?@mohammadadibi,这是我个人使用的polyfill。@如果我包括es5 shim,我可以使用IEF中的每一个和一些功能。你认为Arun P Johny解决方案怎么样?这非常简短。他的答案对于jquery来说是正确的,但是这取决于javascript功能,这些功能需要额外的文件才能在旧的/坏的眉毛上运行呃。我在我的真实程序中测试了你的代码,它返回了错误的答案。我根据你提供的数据集进行了测试,也许会给出更多的代码来测试?我会再次检查,但在此之前,请告诉我哪一个更好地包括es5垫片并使用它,还是第一个代码?
filteredData = $.grep(data, function (value, i) {
if (value[keywords[0][0].key] !== keywords[0][0].value) return false;
if (value[keywords[1][0].key] !== keywords[1][0].value) && (value[keywords[1][1].key] !== keywords[1][1].value)return false;
return true;
});
var array = $.grep(data, function(obj, idx){
return keywords.every(function(list, idx, src){
return list.some(function(item, idx, src){
return obj[item.key] == item.value
});
});
});
console.log(array)
filteredData = $.grep(data, function(value, i) {
for (var k = 0; k < keywords.length; k++) {
var matched = false;
var orlist = keywords[k];
for (var l = 0; l < orlist.length; l++) {
if (value[orlist[l].key] == orlist[l].value) {
matched = true;
break;
}
if (!matched) {
return false;
}
}
return true;
});
var data = [
{"a":1, "b":100},
{"a":1, "b":2, "c":3},
{"a":2, "b":10}
];
var keywords = [
[{key: "a",value: 1}],
[{key: "b",value: 1},{key: "b",value: 2}]
];
function filter(data, keywords) {
var ret = [];
for(var i = 0, d, m; i < data.length; ++i) {
d = data[i];
m = true;
for(var x = 0; x < keywords.length && m; ++x) {
for(var k = 0; k < keywords[x].length && m; ++k) {
var rule = keywords[x][k];
console.log(d, d[rule.key] === rule.value, rule);
m = m && rule.key in d && d[rule.key] === rule.value;
}
if(m) break;
}
if(m) ret.push(d);
}
return ret;
}
console.log(filter(data, keywords));
function es5_grep(data, keywords) {
return data.map(function(row) {
return keywords.every(function(list){
return list.some(function(item){
return row[item.key] === item.value
});
}) ? null : row;
}).filter(function(v) { return !!v; });
}