簡體   English   中英

刪除javascript對象中的嵌套屬性

[英]Deleting nested property in javascript object

我有一個這樣的 JS 對象:

var tenants = {
    'first': {
        'name': 'first',
        'expired': 1
    },
    'second': {
        'name': 'second'
    }
}

我想刪除租戶“first”的“過期”財產,我應該這樣做嗎?

delete tenants['first']['expired'];

注意:這個問題比以下問題更具體: 如何從 JavaScript 對象中刪除屬性? ,因為我的問題集中在“嵌套”部分。

是的。 那行得通。

delete tenants['first']['expired']; delete tenants.first.expired; .

如果你只是因為你想從JSON.stringify()排除它而刪除它,你也可以將它設置為undefined ,比如JSON.stringify() tenants['first']['expired'] = undefined;

如果要刪除的屬性存儲在字符串中,則可以使用此函數

function deletePropertyPath (obj, path) {

  if (!obj || !path) {
    return;
  }

  if (typeof path === 'string') {
    path = path.split('.');
  }

  for (var i = 0; i < path.length - 1; i++) {

    obj = obj[path[i]];

    if (typeof obj === 'undefined') {
      return;
    }
  }

  delete obj[path.pop()];
};

示例用法

var tenants = {
    'first': {
        'name': 'first',
        'expired': 1
    },
    'second': {
        'name': 'second'
    }
}

var property = 'first.expired';    
deletePropertyPath(tenants, property);

如果您的應用程序使用 lodash,那么_.unset是刪除嵌套屬性的安全方法。 您可以指定嵌套鍵而不必擔心它們的存在。

let games = { 'hitman': [{ 'agent': { 'id': 47 } }] };
_.unset(games, 'hitman[0].agent.id');
_.unset(games, 'hitman[0].muffin.cupcake'); // won't break

進一步閱讀: https : //lodash.com/docs/4.17.15#unset

我想出了這個:

const deleteByPath = (object, path) => {
  let currentObject = object
  const parts = path.split(".")
  const last = parts.pop()
  for (const part of parts) {
    currentObject = currentObject[part]
    if (!currentObject) {
      return
    }
  }
  delete currentObject[last]
}

用法:

deleteByPath({ "a" : { "b" : true }},"a.b")

如果您的密鑰路徑以. ,說first.expired在你的情況下,你可以做deleteKey(tenants, 'first.expired')

 const deleteKey = (obj, path) => { const _obj = JSON.parse(JSON.stringify(obj)); const keys = path.split('.'); keys.reduce((acc, key, index) => { if (index === keys.length - 1) { delete acc[key]; return true; } return acc[key]; }, _obj); return _obj; } let tenants = { 'first': { 'name': 'first', 'expired': 1 }, 'second': { 'name': 'second' } }; const PATH_TO_DELETE = 'first.expired'; tenants = deleteKey(tenants, PATH_TO_DELETE); console.log('DELETE SUCCESSFUL:', tenants);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM