使用jQuery map()和动态属性名称删除对象属性?

时间:2012-01-27 18:37:36

标签: jquery object

我尝试使用.map()从名称长度大于1的对象中删除属性:

var result = { a :{}, b : {}, invalid : {} };

result = $.map(result, function(val, prop){
   return prop.length > 1 ? null : { prop : val };
});

console.log(result);

控制台显示result 现在是一个数组(不应该是一个对象), prop字面意思(即那里)在阵列中有许多名为" prop"的属性。

任何帮助都会很棒!

编辑:结合.map()delete的解决方案:

$.map(result, function(val, prop){
   if(prop.length > 1) delete result[prop]; // val is unused but required
});

2 个答案:

答案 0 :(得分:2)

我认为$.map不适合这项任务。我会依靠您不想要的for...in循环和delete属性:

var result = { a :{}, b : {}, invalid : {} };

for (var prop in result) {
    if (result.hasOwnProperty(prop)) {
        if (prop.length > 1) {
            delete result[prop];
        }
    }
}

示例: http://jsfiddle.net/LHFdp/

如果您确实想使用$.map,可以使用[]动态访问属性(有关使用对象的详细信息,请参阅MDN上的this useful article):

var result = { a :{}, b : {}, invalid : {} };

result = $.map(result, function (val, prop) {
    var obj = {};
    if (prop.length > 1) {
        return null;
    } else {
        obj[prop] = val;
        return obj;
    }
});

示例: http://jsfiddle.net/qrwjU/

答案 1 :(得分:0)

jQuery map从您传递给它的数组或对象中提供一个数组。它返回与回调中的条件匹配的数组或对象中的所有项。您可以在结果数组中控制所需内容。