【问题标题】:Assign value of object and nested object in JavaScriptJavaScript 中对象和嵌套对象的赋值
【发布时间】:2020-12-21 13:23:33
【问题描述】:

所以,基本上,我有这个对象(在 vue data() 中):

...
detail: {
  title: 'I have no idea',
  date: 2020-02-12,
  sender: {
    name: 'John Cenna',
    username: 'john10'
  },
  receipent: {
    name: 'Katleen',
    username: 'katmeow'
  },
  ....
}

现在,我想将它们全部分配为 null(用于验证过程,有点),但无法分配嵌套对象(没有子对象的对象只需循环即可)。我该怎么做呢?谢谢

【问题讨论】:

  • 您可能需要使用某种形式的循环。

标签: javascript vue.js object assign


【解决方案1】:

递归解决方案:

  1. 使用Object.entries() 来迭代对象的键值条目,如下所示。请注意,Object.entries() 为非对象返回一个空数组。
  2. 如果条目的值已经是nullundefined,则返回。
  3. 如果条目的值是一个数组,则递归每个数组项(转到第 1 步,将数组项作为要评估的新对象)。
  4. 如果条目的值是一个对象,则在该对象上递归。
  5. 否则,将条目的值设置为null

const data = {
  detail: {
    title: 'I have no idea',
    date: 2020 - 02 - 12,
    sender: {
      name: 'John Cenna',
      username: 'john10'
    },
    receipent: {
      name: 'Katleen',
      username: 'katmeow'
    },
    items: [
      { id: 100, name: 'Apple' },
      { id: 200, name: 'Banana' },
      { id: 300, name: 'Orange' },
    ]
  }
}

function nullify(obj) {
  // 1
  Object.entries(obj).forEach(([k,v]) => {
    // 2
    if (v === null || v === undefined) {
      return
    }
    // 3
    if (Array.isArray(v)) {
      return v.forEach(nullify)
    }

    // 4
    if (typeof v === 'object') {
      nullify(obj[k])
    } else {
      // 5
      obj[k] = null
    }
  })
}

nullify(data.detail)
console.log('res', data.detail)

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 2013-08-02
    • 2021-08-09
    • 2012-12-25
    • 2014-08-12
    • 1970-01-01
    • 2017-11-24
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多