0

localStorage に大きな JSON テーブルがあり、ユーザーが指定したキーを指定して、関連付けられた値にアクセスします。しかし、値やキーが存在しない場合は、それらを作成したいと思います。でも...

次の JSON が与えられます。

var data = [ 
{ 'myKey': 'A', 'status': 0 },
{ 'myKey': 'B', 'status': 1 },
{ 'myKey': 'C' },
{ 'myKey': 'D', 'status': 1 }
];

そして、次の JS:

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)

また

// request non-existing-in-JSON key:
keyE = getJsonVal(data, 'E');
alert("this is E: "+ keyE);

スクリプトは途中で停止します。

のようなものを作成できるエラー値が必要If ( null|| undefined ) Then create new key/valueでしたが、これらのアイテムが存在しないため、スクリプトが停止します。回避策はありますか?Jsfiddle 感謝します。

4

4 に答える 4

1

typeof 演算子を使用すると、プロパティが設定されているかどうかを安全に確認できます

function getJsonVal(json, itemId) {
    for (var i in json) {
        if (typeof json[i].myKey != 'undefined' && json[i].myKey == itemId) {
            return json[i]; 
        }
    }
    return 'someDefault';
}
于 2013-02-08T23:46:01.857 に答える
1

あなたのサンプルコードへの私のリビジョン:

http://jsfiddle.net/dqLWP/

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

var output = getJsonVal(data, 'E');
alert("this is the outputted value: "+ output);

if ( ! output) {
    alert('time to create that new key/value you wanted');
}
于 2013-02-08T23:49:55.617 に答える
0

変数CEどこかに値を設定する場合を除き、それらを引用符で囲む必要があります。

// 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

于 2013-02-08T23:44:21.180 に答える