2017-02-12 84 views
1

我是JavaScript新手,尝试在代码下面,无法获取它。我经历了许多其他职位,但没有工作。根据使用Javascript的其他键的存在显示JSON值

输出:检查是否存在AUTO损坏。如果是,则计数并显示第一个&最后相同。

var myObj, i, x = ""; 
 
myObj = { 
 
    "Initial": { 
 
    "claim": [{ 
 
     "first": "abc", 
 
     "last": "xyz", 
 
     "damage": { 
 
     "auto": true, 
 
     "manual": true 
 
     } 
 
    }, { 
 
     "first": "mne", 
 
     "last": "odc", 
 
     "damage": { 
 
     "manual": true 
 
     } 
 
    }, { 
 
     "first": "svc", 
 
     "last": "tre", 
 
     "damage": { 
 
     "auto": true 
 
     } 
 
    }, { 
 
     "first": "tre", 
 
     "last": "hdf", 
 
     "damage": {} 
 
    }] 
 
    } 
 
} 
 

 
var myObj = myObj.Initial.claim; 
 

 
console.log(myObj); 
 

 
for (i = 0; i < myObj.length; i++) { 
 
    x += myObj.first[i] + "<br>"; 
 
    x += myObj.damage.auto[i] + "<br>"; 
 
} 
 

 
document.getElementById("demo").innerHTML = x;
<p id="demo"></p>

+0

什么叫 “让伯爵” 是什么意思? –

回答

2

首先myObj.Initial.claim是一个数组不是对象,最好将它命名myArr而不是myObj

在访问可能存在或不存在的对象属性之前,必须在使用myObj.hasOwnProperty方法执行此操作之前检查它。

var myObj, i, x = ""; 
 
myObj = { 
 
    "Initial": { 
 
    "claim": [ 
 
     { 
 
     "first": "abc", 
 
     "last": "xyz", 
 
     "damage": { 
 
      "auto": true, 
 
      "manual": true 
 
     } 
 
     }, 
 

 
     { 
 
     "first": "mne", 
 
     "last": "odc", 
 
     "damage": { 
 
      "manual": true 
 
     } 
 
     }, 
 

 
     { 
 
     "first": "svc", 
 
     "last": "tre", 
 
     "damage": { 
 
      "auto": true 
 
     } 
 
     }, 
 

 
     { 
 
     "first": "tre", 
 
     "last": "hdf", 
 
     "damage": {} 
 
     } 
 
    ] 
 
    } 
 
} 
 

 
var myArr = myObj.Initial.claim; 
 

 
console.log(myArr); 
 

 
for (i = 0; i < myArr.length; i++) { 
 
    x += myArr[i].first + "<br>"; 
 

 
    if(myArr[i].damage.hasOwnProperty("auto")) { 
 
    x += myArr[i].damage.auto + "<br>"; 
 
    } 
 
} 
 

 

 
document.getElementById("demo").innerHTML = x;
<p id="demo"></p>

+0

谢谢,为什么它在第二行控制台中显示为未定义。 – Jay

0

可以使用hasOwnProperty功能检查损害是否是自动与否,检查下面的代码片段。

'use strict'; 
 

 
var claims = { 
 
    "Initial": { 
 
    "claim": [{ 
 
     "first": "abc", 
 
     "last": "xyz", 
 
     "damage": { 
 
     "auto": true, 
 
     "manual": true 
 
     } 
 
    }, { 
 
     "first": "mne", 
 
     "last": "odc", 
 
     "damage": { 
 
     "manual": true 
 
     } 
 
    }, { 
 
     "first": "svc", 
 
     "last": "tre", 
 
     "damage": { 
 
     "auto": true 
 
     } 
 
    }, { 
 
     "first": "tre", 
 
     "last": "hdf", 
 
     "damage": {} 
 
    }] 
 
    } 
 
}; 
 

 
var result = []; 
 
for (var i = 0; i < claims.Initial.claim.length; i++) { 
 
    if (claims.Initial.claim[i].damage.hasOwnProperty('auto')) { 
 
    result.push(claims.Initial.claim[i]); 
 
    } 
 
} 
 

 
console.log(result); 
 

 
var x = ''; 
 
for (var i = 0; i < result.length; i++) { 
 
    x += result[i].first + "<br>"; 
 
    x += result[i].damage.auto + "<br>"; 
 
} 
 

 
document.getElementById("demo").innerHTML = x;
<p id="demo"></p>

0

你可以使用hasOwnProperty检查自动存在。

例如:

myObj.forEach(function(val) { 
    if (val.damage.hasOwnProperty('auto') && val.damage.auto) { 
     console.log(val.first, val.last); 
    } 
}); 
相关问题