为什么对象键没有从对象中删除?

时间:2016-04-02 14:26:34

标签: javascript jquery

我的演示中有一个对象。

var vm = {
    a: {
        module: "not test"
    },
    b: {
        module: "test"
    }
}

我需要删除具有"test"模块名称的对象的密钥。

预期输出

vm = {
    a: {
        module: "not test"
    }
}

这是一个小提琴:https://jsfiddle.net/kymdsj1s/

这是我的代码。我使用了delete关键字,但它对我不起作用。

var tempModule = "test";
var vm = {
    a: {
        module: "not test"
    },
    b: {
        module: "test"
    }
}

deleteItem(tempModule)

function deleteItem(moduleName) {
    if (Object.key(vm) == moduleName)
        delete vm
}

console.log(vm)

2 个答案:

答案 0 :(得分:3)

您正在调用delete vm,它不会删除您的预期 - vm是您的整个视图模型对象,如果您想删除它的b属性,那么您可以尝试:

var tempModule = 'test';
var vm = {
    a: { module: 'not test' },
    b: { module: 'test' }
};

function deleteItem(moduleName) {
    for (var key in vm) {
        if (vm.hasOwnProperty(key) && vm[key]['module'] === moduleName) {
            delete vm[key];
        }
    }
}

deleteItem(tempModule);
console.log(vm);

这是updated fiddle

答案 1 :(得分:1)

注意,Object.key()应为Object.keys();同时Object.keys()返回一个数组,可以使用括号表示法访问该数组;例如,

Object.keys(vm)[0] // "a"

Object.keys(vm)[1] // "b"
function deleteItem(moduleName) {
  Object.keys(vm).forEach(function(key) {
    if (vm[key]["module"] === moduleName) delete vm[key]
  })
}



var tempModule = "test";
var vm = {
  a: {
    module: "not test"
  },
  b: {
    module: "test"
  }
}

console.log(Object.keys(vm)[0], Object.keys(vm)[1]);

deleteItem(tempModule);

function deleteItem(moduleName) {
  Object.keys(vm).forEach(function(key) {
    if (vm[key]["module"] === moduleName) delete vm[key]
  })
}

console.log(vm)