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);
}
});
}

我如何检查该值是否为真?为什么它会返回假?
答案 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