【问题标题】:Remove object property based on array values [duplicate]根据数组值删除对象属性[重复]
【发布时间】:2016-11-08 18:30:09
【问题描述】:

我有我的参考数组

const reference = ['prefix', 'suffix', 'student_email']

我的对象看起来像这样

const obj = {
               'prefix':'John',
               'suffix':'Doe',
               'student_email':'johndoe23@rigly.org',
               'course_code':'PJ4004',
               'professor':'McMillian'
            }

我想删除“course_code”和“professor”,因为它不属于参考数组。我该怎么做?

预期输出:

const obj = {
               'prefix':'John',
               'suffix':'Doe',
               'student_email':'johndoe23@rigly.org',
            }

我有什么:

reference.map(v => {
    delete obj[v]; // this will delete what I don't want it to delete
});

我怎样才能只删除那些我不需要/不在参考数组中的?

【问题讨论】:

  • 你如何使用 obj 和 reactjs?

标签: javascript reactjs


【解决方案1】:

可以循环遍历Object#keys,删除数组中没有的属性:

const reference = ['prefix', 'suffix', 'student_email']
const obj = {
  'prefix':'John',
  'suffix':'Doe',
  'student_email':'johndoe23@rigly.org',
  'course_code':'PJ4004',
  'professor':'McMillian'
}

Object.keys(obj).forEach(i=>{
  if(reference.indexOf(i) === -1) delete obj[i];
});

console.log(obj);

【讨论】:

  • 为什么要将一个允许快速查找的对象转换为导致查找速度较慢的新结构?
  • ...为什么要回答一个封闭的问题?
  • @squint 抱歉,我在回答时没有看到副本。但是我正在做什么将对象转换为“导致查找速度变慢的新结构”?我糊涂了。删除这样的对象的属性是一种不好的做法?我现在很困惑,也很感兴趣。稍后我将删除anwser,让您有时间回答。
  • 对不起,我不清楚。您以数组形式获取对象的所有键并迭代所有键。对于每个键,您将搜索另一个 Array 以找到该键。因此,您可以对所有键进行线性遍历,其中每个键都需要单独的线性搜索。对象已经使您能够查找键,因此当您可以直接查找 reference 中的所需键时,无需对所有键执行线性搜索。对对象的直接查找将比 reference 的线性搜索更快,并且发生频率更低。
  • 抱歉,我把它弄反了。我在想他要删除 reference 道具。这个解决方案很好,因为他想要一个交集而不是一个差异。
猜你喜欢
  • 2020-06-29
  • 2012-05-17
  • 2019-01-14
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多