0

私はJavascriptオブジェクトを持っています:

var errorMap = {
    100: 'You must enter a name.',
    200: 'You must enter an address.',
    300: 'You must enter a DOB.'
}

コードの別の部分で、エラーコードの配列を受け取ります。

var errorCodes = [100, 200, 500, 600];

私がやりたいのは、errorCodes配列をオブジェクトのキーと比較し、に対応するキーがないerrorMapすべてのエラーコードを返すことです。この場合、私はこれを取り戻したいと思います:errorMap

[500, 600]

どうすればよいですか?jQueryにアクセスできます。

4

5 に答える 5

7

最新のブラウザ用のJavascript( shimを備えた古いブラウザで動作します)

var missing = [100, 200, 500, 600].filter(function(v){
    return !errorMap.hasOwnProperty(v)
});

//missing = [500, 600]

従来のブラウザのサポートが必要で、shimが受け入れられない場合のjQuery:

var missing = $.grep( [100, 200, 500, 600], function(v){
    return !errorMap.hasOwnProperty(v)
});

//missing = [500, 600]
于 2012-07-11T19:33:41.417 に答える
1

jQueryは実際には必要ありません。単純なforループでも機能します。

var missing = [];
for(var i = 0; i < errorCodes.length; i++) {
    var code = errorCodes[i];
    if(errorMap[code] === undefined) {
        missing.push(code)
    }
});

jQueryの場合:

var missing = [];
$.each(errorCodes, function(i, code) {
    if(errorMap[code] === undefined) {
        missing.push(code)
    }
});
于 2012-07-11T19:32:26.957 に答える
0
var notRealError = [];
for(var i = 0; i < errorCodes.length; ++i){
    if(!errorMap[errorCodes[i]])  notRealError.push(errorCodes[i]);
}

notRealErrorマップにないエラーコードを含む配列です。

于 2012-07-11T19:32:40.130 に答える
0

これではjQueryは必要ありません。これを試して:

var result = [];
var l = errorCodes.length;
for (var i = 0; i < l; i++)
    if (!errorMap.hasOwnProperty(errorCode[i]))
        result.push(errorCode[i]);
于 2012-07-11T19:33:19.023 に答える
0
var returnCodes = [];

for (c in errorCodes) {
    if (errorMap[errorCodes[c]] == undefined) {
        returnCodes.push(errorCodes[c]);
    }
}

return returnCodes;
于 2012-07-11T19:34:16.687 に答える