首页 > 解决方案 > 仅提取对象中具有值的属性

问题描述

我有一个看起来像这样的对象,例如:

let data = {
 color: "green",
 color1: "red",
 color2: null,
 color3: 34,
 color4: null,
 color5: true,
 color6: [],
}

我只想提取有价值的属性并创建一个新对象。所以这个新对象看起来像这样:

   let data = {
     color: "green",
     color1: "red",
     color3: 34,
     color5: true,
    }

这将是动态的,属性和值可以改变,但最后我总是想做一个只有值的对象。有什么实用的方法可以做到这一点?

标签: javascriptobject

解决方案


new object您可以按照以下步骤创建一个:

  • 您可以使用Object.keys
  • 然后,您可以使用Array.reduce将键数组转换为转换后的对象。
  • acc中,您将获得累积的对象。
  • curr中,您将收到当前密钥
  • 创建一个函数isEmptyObject,您可以在其中定义规则以检查是否存在。根据您的示例,我已经检查了nulland Array length。您可以修改此功能。

let data = {
 color: "green",
 color1: "red",
 color2: null,
 color3: 34,
 color4: null,
 color5: true,
 color6: [],
}

var newObj = Object.keys(data).reduce((acc, curr) => {
  if (isEmptyObject(data, curr)) return acc;
  acc[curr] = data[curr];
  return acc;
}, {});

function isEmptyObject(obj, key) {
  return obj[key] === null || Array.isArray(obj[key]) && obj[key].length === 0;
}

console.log(newObj);


推荐阅读