如何在javascript中检查数组的值?

时间:2015-08-19 06:10:54

标签: javascript arrays ajax json

我有我的json。我有两个对象。 enter image description here

uid 0090000165在我的json上,但当我检查它时,它返回false。

这是我的代码



var conf_url = "http://192.168.236.33//confbridge_participants/conference_participants.json?cid=0090000007";

 var uid = [];

    getParticipant(conf_url, function(data) {
        data.forEach(function(obj){
           uid.push(obj['uid']);

           console.log(uid)
        })
         
         if(uid == '0090000165'){
            document.write("true");
         }else{
             document.write("false");
         }
    });


 function getParticipant(conf_uri, handleData) {
    $.ajax({
      type: "GET",
      url: conf_uri,
      dataType: "jsonp",
      jsonpCallback: 'callback',
      contentType: "application/javascript",
      success: function(data) {
        handleData(data);
        //console.log(data);
      }
    });

  }




我如何检查该值是否为真?为什么它会返回假?

2 个答案:

答案 0 :(得分:3)

您的数组包含两个条目,但在此行中:

if(uid == '0090000165'){

...您只需将其与其中一个字符串进行比较即可。这将调用数组上的toString,它将调用Array#join,它将为您提供字符串"0090000163,0090000165"。因此,您应将其与"0090000165"进行比较。这将是错误的。

在您的控制台屏幕截图中,第二个条目包含您想要的uid,因此您可以执行此操作:

if (uid[1] == "0090000165") {
//     ^^^----- second entry, first would be at index 0

...但我怀疑由于uid包含多个条目,您需要重新编写逻辑,而不仅仅是比较。

回答菲利克斯的问题:

  

您想测试ID是否在数组中吗?

你回答"是"。我将假设您为某些其他原因构建uid数组。您可以通过在forEach

中查看来完成此操作
getParticipant(conf_url, function(data) {
    var hasTheValue = false;

    data.forEach(function(obj){
       uid.push(obj['uid']);
       if (uid == '0090000165') {
         hasTheValue = true;
       }
       console.log(uid)
    })

     if(hasTheValue){
        document.write("true");
     }else{
         document.write("false");
     }
});

或者如果您以后需要使用该阵列,则可以使用indexOf

if (uid.indexOf('0090000165') != -1) {
  // yes it has it
}

如果您不需要array任何内容,那么请不要构建它,只是这样做:

getParticipant(conf_url, function(data) {
     var hasTheValue = data.some(function(obj){
        return obj['uid']  == '0090000165';
     });

     if(hasTheValue){
        document.write("true");
     }else{
         document.write("false");
     }
});

...但是,我再次假设您正在为其他东西构建数组(因为它已在函数外声明)。

注意:我建议不要使用uid作为属性的名称,也不要将变量放在预期单个值的位置,作为名称他们的数组。但这可能是我的英语偏见,我知道并非所有语言都区分单数和复数名词。如果你的母语很自然(我不知道那是英语还是别的),请不理我。

答案 1 :(得分:0)

很明显,你将对象的所有uid推送到数组中,因此你必须检查数组中任何项的值是否等于你的字符串值,

Iterator