如何返回不在Javascript地图中的元素数组?

时间:2012-07-11 19:30:31

标签: javascript jquery

我有一个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。

5 个答案:

答案 0 :(得分:7)

适用于现代浏览器的Javascript(适用于具有shim的旧版浏览器)

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

//missing = [500, 600]

jQuery,如果需要遗留浏览器支持且不接受填充程序:

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

//missing = [500, 600]

答案 1 :(得分: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)
    }
});

答案 2 :(得分:0)

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

notRealError是一个包含地图中不存在的错误代码的数组。

答案 3 :(得分:0)

不需要jQuery这个。试试这个:

var result = [];
var l = errorCodes.length;
for (var i = 0; i < l; i++)
    if (!errorMap.hasOwnProperty(errorCode[i]))
        result.push(errorCode[i]);

答案 4 :(得分:0)

var returnCodes = [];

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

return returnCodes;