【问题标题】:How do I return array of keys that have only empty values in the objects?如何返回对象中只有空值的键数组?
【发布时间】:2021-01-22 20:21:04
【问题描述】:

我正在学习 ES5 中的数组/对象,现在我有这样的代码,它返回过滤后的非空键/值的对象:

var object = [{"notEmptyValue":"1","emptyValue1":"","notEmptyValue2":"1","emptyValue2":""}];

function removeEmpty(data) {
  Object.keys(data).forEach(function(key) {
    (data[key] && typeof data[key] === 'object') && removeEmpty(data[key]) ||
    (data[key] === '' || data[key] === null) && delete data[key] 
  });
  return JSON.stringify(data);
}

//returns [{"notEmptyValue":"1","notEmptyValue2":"1"}]
//but I would like [{"emptyValue1":"","emptyValue2":""}]
//OR the best ['emptyValue1', 'emptyValue2']

但是,我需要相反的,我需要返回空的。在最好的情况下,只有空的键数组(参见代码 sn-p)。我如何做到这一点?

【问题讨论】:

  • 您使用Object.entries 而不是Object.keys,然后过滤掉任何具有非空字符串值的内容。 (或者如果您不关心密钥,Object.values()
  • 为什么你的对象在 [... ] 之间?
  • @BülentAkgül 因为我试图将它从服务器显示到客户端,它是纯对象,但它给了我 [object Object] 所以当我对 JSON.stringify[data] 执行结果时将对象放入数组中,以便我可以看到它。不知道我解释的对不对,我是新手

标签: javascript arrays object filtering


【解决方案1】:

使用Object.keys() 获取对象键,filter 只留下空键。

更新:为了对对象数组执行此操作,我使用了 map 并从每个对象返回它是空键。

let objects = [{
    "notEmptyValue": "1",
    "emptyValue1": "",
    "notEmptyValue2": "1",
    "emptyValue2": ""
  },
  {
    "notEmptyValue": "1",
    "emptyValue3": "",
    "notEmptyValue2": "1",
    "emptyValue4": ""
  }
];


let emptyKeys = objects.map(object => Object.keys(object).filter(key => object[key] === ''));;
console.log(emptyKeys);

【讨论】:

  • 这对我来说看起来不错,我明白了,但是如何在 ES5 中做到这一点?我的浏览器/平台不支持 '=>' 类型的功能:/
  • 我明白了!!非常感谢!!
  • 还有一个问题,如果我有类似 { "notEmptyValue": "1", "emptyValue1": "", "notEmptyValue2": "1", "emptyValue2": "" }, {“notEmptyValue”:“1”,“emptyValue1”:“”,“notEmptyValue2”:“1”,“emptyValue2”:“2”};当我尝试这个时它崩溃了
  • @JohnLong 这是一个对象数组吗?在数组上使用forEach
  • 是的,有没有办法可以编辑 sn-p?我不断得到空数组:/
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2021-10-02
相关资源
最近更新 更多