获取对象数据,同时加载2个条件

时间:2015-11-28 07:48:02

标签: javascript

var id = "displayImage1";
//my object 
var json = {
  displayImage1: {
    object: "style1"
  },
  displayImage2: {
    object: "style2"
  },
  displayImage3: {
    object: "style3"
  }
};

function JsonLoad(_id){
    checkImgCanvas = _id;
    for (var i in json) {
    if(i === checkImgCanvas){
        alert("yes got it");
    }else{
        alert("not object found");
    }
    }

}

我正在使用此函数来检查是否有任何json对象值与id值匹配,如果是,则加载“yes got it”,否则加载“not object found”。我确实得到了匹配,但它也加载了“未找到对象”2次,我不明白为什么?它不应该加载else条件因为我在我的json对象中匹配。

如果匹配加载“是”,如果没有加载其他条件,我该怎么做这个函数。(加载一次)

Demo

2 个答案:

答案 0 :(得分:0)

由于你的for循环甚至在你找到你的结果之后就会执行,你得到的是#34;没有找到对象"信息。您应该在找到所需结果后退出循环并实现此目的,您可以在成功提醒消息后使用break;

function JsonLoad(_id){
    var matchFound = false;
    for (var i in json) {
        if(i === _id) {
            matchFound = true;
            break;
        }
    }

    if(matchFound) {
        alert("yes got it");
    }else{
        alert("not object found");
    }
}

答案 1 :(得分:0)

您可以使用Array.prototype.some()

  

some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。

var json = { displayImage1: { object: "style1" }, displayImage2: { object: "style2" }, displayImage3: { object: "style3" } };

function JsonLoad(_id) {
    !Object.keys(json).some(function (k) {
        if (k === _id) {
            document.write('yes got it<br>')
            return true;
        }
    }) && document.write('not object found<br>');
}

JsonLoad('displayImage0');
JsonLoad('displayImage1');