How to remove a property from an object?

前端 未结 2 1101
后悔当初
后悔当初 2020-12-31 01:30

Currently an event is set on checkboxes, and event.target gives me the status (checked = true/false) of checkbox which is clicked.

相关标签:
2条回答
  • 2020-12-31 01:59

    What you have is an object and not an array (although an array is an object). You declare an object literal with {} whereas an array literal is declared with [].

    You can use delete to remove an object property like so

    delete selectedMap[event.target.id];
    
    0 讨论(0)
  • 2020-12-31 02:20

    Using delete:

    delete selectedMap[event.target.id];
    

    You're setting the value incorrectly, though. Here's the correct way:

    if(event.target == true){
        var key = event.target.id;   // <== No quotes
        var val = event.target.name; // <== Here either
        selectedMap[key] = val;
    }
    

    In fact, you could:

    if(event.target == true){
        selectedMap[event.target.id] = event.target.name;
    }
    

    Getting the event target stuff out of the way, it's easier to envision this with simple strings:

    var obj = {};
    obj.foo = "value of foo";
    alert(obj.foo);    // alerts "value of foo" without the quotes
    alert(obj["foo"]); // ALSO alerts "value of foo" without the quotes, dotted notation with a literal and bracketed notation with a string are equivalent
    delete obj.foo;    // Deletes the `foo` property from the object entirely
    delete obj["foo"]; // Also deletes the `foo` property from the object entirely
    var x = "foo";
    delete obj[x];     // ALSO deeltes the `foo` property
    

    When using a plain object like this, I always use a prefix on my keys to avoid issues. (For instance, what would happen if your target element's ID was "toString"? The object already has an [inherited] property called "toString" and things would get Very Weird Very Quickly.)

    So for me, I do this:

    if(event.target == true){
        selectedMap["prefix" + event.target.id] = event.target.name;
    }
    

    ...and of course:

    delete selectedMap["prefix" + event.target.id];
    
    0 讨论(0)
提交回复
热议问题