Javascript JSON get key/value:如果不存在,JS就停止。如何解决设置阵列的问题?
给定localStorage中的一个大JSON表和用户提供的一个给定键,我访问一个关联的值。但是如果值和/或键不存在,那么我想创建它们。然而 给定以下JSON:Javascript JSON get key/value:如果不存在,JS就停止。如何解决设置阵列的问题?,javascript,jquery,json,Javascript,Jquery,Json,给定localStorage中的一个大JSON表和用户提供的一个给定键,我访问一个关联的值。但是如果值和/或键不存在,那么我想创建它们。然而 给定以下JSON: var data = [ { 'myKey': 'A', 'status': 0 }, { 'myKey': 'B', 'status': 1 }, { 'myKey': 'C' }, { 'myKey': 'D', 'status': 1 } ]; function getJsonVal(json, itemId) { f
var data = [
{ 'myKey': 'A', 'status': 0 },
{ 'myKey': 'B', 'status': 1 },
{ 'myKey': 'C' },
{ 'myKey': 'D', 'status': 1 }
];
function getJsonVal(json, itemId) {
for (var i in json) {
if (json[i].myKey == itemId) {
return json[i];
}
}
}
和以下JS:
var data = [
{ 'myKey': 'A', 'status': 0 },
{ 'myKey': 'B', 'status': 1 },
{ 'myKey': 'C' },
{ 'myKey': 'D', 'status': 1 }
];
function getJsonVal(json, itemId) {
for (var i in json) {
if (json[i].myKey == itemId) {
return json[i];
}
}
}
如果我
// request non-existing-in-JSON value:
valC = getJsonVal(data, 'C');
alert("this is C's value: "+ valC)
或
剧本中途停了下来
我希望有一些错误值,允许我创建类似于
的If(null | | undefined),然后创建新的键/值
,但我的脚本只是停止,因为这些项不存在。有什么解决办法吗?jsFIDLE感谢。除非您在某处为变量C
和E
设置值,否则您需要将它们放在引号中:
// request non-existing-in-JSON value:
valC = getJsonVal(data, 'C');
alert("this is C's value: "+ valC)
// request non-existing-in-JSON key:
keyE = getJsonVal(data, 'E');
alert("this is E: "+ keyE);
此外,您还应提醒您设置的变量(
valC
或keyE
)。使用您可以安全检查的运算符类型,检查是否设置了属性
function getJsonVal(json, itemId) {
for (var i in json) {
if (typeof json[i].myKey != 'undefined' && json[i].myKey == itemId) {
return json[i];
}
}
return 'someDefault';
}
我对示例代码的修订:
要改进Lyndon的答案:
function getJsonVal(json, itemId) {
for (var i in json) {
if (json[i].myKey == itemId) {
return json[i].status; // add .status here so you can see the value of keys that exist and have one.
}
}
}
好球!完成。谢谢杰夫。简单英语中的(!output)是什么意思@林登:我希望接受你的答案,请用简单的英语澄清“(!output)”并在答案的IF后面加上:data.push({'myKey':'E','status':1});“!”否定一个表达式。“if(!true)”基本上是指“if(false)”更多:所以!输出意味着“如果输出不存在”或“未定义”,我明白了。谢谢。如果我理解的很好,这只是为了检查属性设置。正确的?