Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery动态if条件_Javascript_Jquery - Fatal编程技术网

Javascript jquery动态if条件

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

我有:

然后:

所以我需要找到数据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] !== 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; });
}