Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON get key/value:如果不存在,JS就停止。如何解决设置阵列的问题?_Javascript_Jquery_Json - Fatal编程技术网

Javascript JSON get key/value:如果不存在,JS就停止。如何解决设置阵列的问题?

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

给定localStorage中的一个大JSON表和用户提供的一个给定键,我访问一个关联的值。但是如果值和/或键不存在,那么我想创建它们。然而

给定以下JSON:

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)”更多:所以!输出意味着“如果输出不存在”或“未定义”,我明白了。谢谢。如果我理解的很好,这只是为了检查属性设置。正确的?