Подтвердить что ты не робот

Как удалить свойство из объекта?

В настоящее время событие установлено на checkboxes, а event.target дает мне status (checked = true/false) установленного флажка.

Я поддерживаю объект, который сохраняет дорожку во всех выбранных флажках

var selectedMap  = {};

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

и я хочу удалить элемент с карты, которая не выбрана

else if(event.target == false){
  selectedMap.remove(event.target.id);
}

когда я запускаю это, он дает мне ошибку в Firebug: selectedMap.remove is not a function

Итак, мой вопрос Как удалить элемент, если флажок не выбран?

4b9b3361

Ответ 1

Использование delete:

delete selectedMap[event.target.id];

Однако вы задаете значение неправильно. Здесь правильный путь:

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

На самом деле вы могли:

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

Получение целевого материала события в пути, его проще представить с помощью простых строк:

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

При использовании простого объекта, подобного этому, я всегда использую префикс на своих ключах, чтобы избежать проблем. (Например, что произойдет, если ваш идентификатор целевого элемента был "toString"? Объект уже имеет свойство [inherited], называемое "toString", и все получится очень странно очень быстро.)

Итак, для меня я делаю это:

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

... и, конечно же:

delete selectedMap["prefix" + event.target.id];

Ответ 2

У вас есть объект, а не массив (хотя массив - это объект). Вы объявляете литерал объекта с {}, тогда как литерал массива объявляется с помощью [].

Вы можете использовать delete, чтобы удалить свойство объекта таким образом

delete selectedMap[event.target.id];