【问题标题】:Jquery filter array of object with loop带有循环的对象的jQuery过滤器数组
【发布时间】:2015-09-08 23:52:50
【问题描述】:

我有一个这样的对象数组:

myArray = [
{label: "a", 
value: "100"},
{label: "b",
value: "101"},
{label: "c",
value: "102"}
...

我想像这样过滤它:

myArrayFiltered = myArray.filter(function(v){ 
    return v["value"] == "101" || v["value"] == "102"});

哪个会返回

myArrayFiltered = [
{label: "b",
value: "101"},
{label: "c",
value: "102"}]

在此示例中,但我想使用一组值进行过滤。我该怎么做?

【问题讨论】:

    标签: javascript jquery arrays filter


    【解决方案1】:

    只需检查您要过滤的值是否在您的数组中

    myArrayFiltered = myArray.filter(function(v){ 
        return ["102", "103"].indexOf(v.value) > -1;
    });
    

    【讨论】:

    • 这个有效。不要忘记添加 );在末尾。事实上,我没有使用数组来过滤,而是使用第一个数组这样的对象数组。我将其转换为数组以仅获取值,然后使用此解决方案。
    【解决方案2】:

    您可以在过滤器中使用.some 方法:

    var requiredValues = ["101", "102", "103"];
    myArrayFiltered = myArray.filter(function(v){ 
        return requiredValues.some(function(value) {
            return value === v.value;
        });
    });
    

    【讨论】:

    • 您可以将requiredValues 作为第二个参数传递给.filter(callback[, thisArg]),然后使用this.indexOf()。那么您就不必依赖“全局”参数 - Array.prototype.filter()
    • @Andreas 当然可能。我更喜欢这种方法,因为传入变量并将其作为 context 传递感觉不自然,所以我将保持原样。
    【解决方案3】:
    var arrValues = ["101", "102"];
    
    
    
     var result = getData(arrValues,"102")
    
    
    
     function getData(src, filter) {
            var result = jQuery.grep(src, function (a) { return a == filter; });
            return result;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2012-01-21
      相关资源
      最近更新 更多