首页 > 解决方案 > JavaScript 中对象和嵌套对象的赋值

问题描述

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

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

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

标签: javascriptvue.jsobjectassign

解决方案


递归解决方案:

  1. 用于Object.entries()迭代对象的键值条目,如下所示。请注意,它Object.entries()为非对象返回一个空数组。
  2. 如果条目的值已经是nullor undefined,则返回。
  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)


推荐阅读