如何检查对象数组中的特定值,并仅将操作应用于该对象值

时间:2016-01-20 19:21:37

标签: javascript jquery

我有一个对象数组。我试图检查数组中对象的特定值,并仅显示该对象的特定字段。

{
 "data" : {
  "items" : [ {
  "name" : "Basic Week",
  "id" : "WK2"
   },
  {
   "name" : "Basic month",
  "id" : "WK1"
  },
  {
  "name" : "Basic subscription",
  "id" : "11"
  },
  {
  "name" : "all time subscription",
  "id" : "11"
  }]
 }
}

我试图检查包含" subscription"的字符串,所以当我进行检查时,它应该返回2个对象:

{
  "name" : "Basic subscription",
  "id" : "11"
  },
  {
  "name" : "all time subscription",
  "id" : "11"
  }

以下是我的工作方式:

    $.ajax("/api/1.0/getData",{
        success: function (data) {
          lists = data.filter(function (item) {
          if(item.name.indexOf("subscription")){
                    $("#some_div").show();
             }else{
                   $("#some_div").hide();}
          });
        }
    });

HTML:

<input type="text" id="some_div" style="display:none;"/>

但是在上面的例子中它显示了所有对象的div,其中我想仅显示包含字符串&#34; subscription&#34;的值的div。

EDIT --------

$.ajax("/api/1.0/getData",{
        success: function (data) {
          lists = data.data.items.filter(function (item) {
          if(item.name.indexOf("subscription")> -1){
                    $("#some_div").show();
             }else{
                   $("#some_div").hide();}
          });
        }
    });

上面编辑的代码仍然隐藏了id =&#34; some_div&#34;对于所有对象。

2 个答案:

答案 0 :(得分:-1)

&#13;
&#13;
var temp = {
 "data" : {
  "items" : [ {
  "name" : "Basic Week",
  "id" : "WK2"
   },
  {
   "name" : "Basic month",
  "id" : "WK1"
  },
  {
  "name" : "Basic subscription",
  "id" : "11"
  },
  {
  "name" : "all time subscription",
  "id" : "11"
  }]
 }
};

console.log($.grep(temp.data.items, function(element){
  return element.name.indexOf('subscription') > -1;
}));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:-3)

由于您尝试在items数组中搜索,因此成功回调中的数据变量不是您应该过滤的数组。

考虑到对象的结构,您应该通过:data.data.items。

访问该数组

所以,试着把它放在你的成功函数中:

success: function (data) {
      data.data.items.forEach( function (item) {
           if (item.nome.contains("subscription")) {
                $('#some_div').show();
           } else {
                $('#some_div').hide();
           }
      });   
}

- 编辑

您还需要HTML元素的不同ID属性。

像这样:

<input type="text" id="some_div_0" style="display:none;"/>
<input type="text" id="some_div_1" style="display:none;"/>
<input type="text" id="some_div_2" style="display:none;"/>
<input type="text" id="some_div_3" style="display:none;"/>

然后你应该在数组中使用对象的某些属性来显示或隐藏每个属性。

这里,我使用数组中对象的位置来显示或隐藏对应的HTML元素:

success: function (data) {
      data.data.items.forEach( function (index, item) {
           if (item.nome.contains("subscription")) {
                $('#some_div_' + index).show();
           } else {
                $('#some_div_' + index).hide();
           }
      });   
}