2016-04-28 15 views
0

私は、オブジェクトではないプロパティだけを含むオブジェクトのコピーを作成しようとしています。しかし、子オブジェクトはそれと共にコピーされます。オブジェクトであるすべてのプロパティのオブジェクトをフィルタリングするにはどうすればよいですか?

var testObject = { 
    stringProperty: "hi", 
    intProperty: 4, 
    objectProperty: {}, 
    nullProperty: null 
}; 

console.log(removeChildObjects(testObject)); 

function removeChildObjects(object) { 
    var keys = Object.keys(object); 
    var newObject = {}; 
    keys.forEach(function(key) { 
    console.log(key, object[key], typeof object[key]); 
    if (typeof object[key] != "object") { 
     newObject[key] = object[key]; 
    } 
    }); 
    return object; 
} 

またreturn newObject;return object;を交換してみてくださいここhttps://jsfiddle.net/uss94sc3/1/

+0

配列はオブジェクトであることに注意してください。それらも削除しますか? – Barmar

+0

デバッガでプログラムをトレースしましたか? 'return'行に特に注意してください。 –

答えて

0

)、壊れたtypeof単項演算子に依存することはできません。

function removeChildObjects(object) { 
    return _.omit(object, _.isObject); 
} 
+1

ダブルfacepalm !!ありがとう。 – Person93

+0

@ Person93それは大丈夫です:)注意してください – isvforall

0

それをチェックアウト。それはもっと良く機能します!

return object; 

を使用すると、厳密にnullundefinedの特性を維持する(オブジェクトのプロパティをフィルタリングする場合は、newObject

return newObject; 
0

あなたはこの

var testObject = { 
 
        stringProperty: "hi", 
 
        intProperty: 4, 
 
        objectProperty: {}, 
 
        nullProperty: null 
 
       }; 
 
var filterPrimitive = o => Object.keys(o).reduce((p,k) => {typeof o[k] != "object" && (p[k] = o[k]); return p},{}); 
 

 
document.write("<pre>" + JSON.stringify(filterPrimitive(testObject),null,2) + "</pre>");
を試みることがあります。アンダースコアと、より簡潔に

function removeChildObjects(object) { 
    var keys = Object.keys(object); 
    var newObject = {}; 
    keys.forEach(function(key) { 
     if (typeof object[key] != "object" || object[key] == null) { 
      newObject[key] = object[key]; 
     } 
    }); 
    return newObject; 
} 

か:

typeof null 
// "object" 

あなたがにあなたのコードを変更しますか、

関連する問題