Удаление объекта-свойства, переданного в качестве аргумента функции - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь удалить свойство объекта:

var test = {abc: 1};
console.log(delete test.abc); //works fine and returns 'true'

Следующая конструкция сводит меня с ума

function deleteNode(_node) {
  console.log(delete _node);
}

deleteNode(test.abc); // does not work and returns 'false'

Почему?Я прочитал много вопросов о stackoverflow относительно проблем с удалением и прочитал большинство типичных предоставленных ссылок.Но я не могу найти решение этой простой проблемы ...

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

    var test = {abc: 1};
    function deleteNode(_node) {
      console.log(delete _node);
    }
    
    deleteNode(test.abc);

Когда вы вызывали deleteNode выше, test.abc уже был преобразован в 1 перед передачей в функцию.deleteNode технически вызывает delete 1.И согласно стандарту ES удаление аргумента функции напрямую приводит к false или к ошибке в режиме строгий .

"use strict";
var test = {a: 1};
function del(a) {
    console.log(delete a);
}
del(test.a);

Вам нужно будет передать объект и ключ в качестве различных аргументов методу.

    var test = {abc: {a: 1, b: 2, c: {d: 1}}};
    function deleteNode(obj, key) {
      console.log(eval('delete obj.' +key));
    }
    
    deleteNode(test, 'abc.c.d');
    console.log('test is', test)
0 голосов
/ 12 июня 2018

Удаление динамических объектов объекта может быть достигнуто следующим образом:

function deleteNode(obj, key) {
  delete obj[key]
}

Подробнее см. delete docs .

При наличии «пути»например «abc», вы можете использовать lodash unset , который удаляет вложенные записи:

var object = { 'a': { 'b': { 'c': 7 } } }; 
_.unset(object, 'a.b.c');

Использование eval означает , не рекомендуется .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...