2015-02-17 4 views
0

В соответствии с docs оператор удаления должен иметь возможность удалять свойства объектов. Я пытаюсь удалить свойства объекта, который является «ложным».Как удалить свойство объекта?

Например, я предположил следующее будет удалить все falsey свойств от testObj но это не так:

var test = { 
     Normal: "some string", // Not falsey, so should not be deleted 
     False: false, 
     Zero: 0, 
     EmptyString: "", 
     Null : null, 
     Undef: undefined, 
     NAN: NaN    // Is NaN considered to be falsey? 
    }; 

    function isFalsey(param) { 
     if (param == false || 
      param == 0  || 
      param == "" || 
      param == null || 
      param == NaN || 
      param == undefined) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

// Attempt to delete all falsey properties 
for (var prop in test) { 
    if (isFalsey(test[prop])) { 
     delete test.prop; 
    } 
} 

console.log(test); 

// Console output: 
{ Normal: 'some string', 
    False: false, 
    Zero: 0, 
    EmptyString: '', 
    Null: null, 
    Undef: undefined, 
    NAN: NaN 
} 

ответ

3

Использование delete test[prop] вместо delete test.prop, потому что со вторым подходом, который вы пытаетесь удалить свойство prop буквально (чего у вас нет в вашем объекте). Кроме того, по умолчанию, если объект имеет значение, которое null, undefined, "", false, 0, NaN с использованием в случае выражения или возвращает ложь, так что вы можете изменить свою isFalsey функцию

function isFalsey(param) { 
    return !param; 
} 

Попробуйте с этим кодом :

var test = { 
 
     Normal: "some string", // Not falsey, so should not be deleted 
 
     False: false, 
 
     Zero: 0, 
 
     EmptyString: "", 
 
     Null : null, 
 
     Undef: undefined, 
 
     NAN: NaN    // Is NaN considered to be falsey? 
 
    }; 
 

 
    function isFalsey(param) { 
 
     return !param; 
 
    } 
 

 
// Attempt to delete all falsey properties 
 
for (var prop in test) { 
 
    if (isFalsey(test[prop])) { 
 
     delete test[prop]; 
 
    } 
 
} 
 

 
console.log(test);

Смежные вопросы