javascript - 仅提取对象中具有值的属性
问题描述
我有一个看起来像这样的对象,例如:
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,
}
这将是动态的,属性和值可以改变,但最后我总是想做一个只有值的对象。有什么实用的方法可以做到这一点?
解决方案
new object
您可以按照以下步骤创建一个:
- 您可以使用
Object.keys
- 然后,您可以使用
Array.reduce
将键数组转换为转换后的对象。 - 在
acc
中,您将获得累积的对象。 - 在
curr
中,您将收到当前密钥 - 创建一个函数
isEmptyObject
,您可以在其中定义规则以检查是否存在。根据您的示例,我已经检查了null
andArray 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);
推荐阅读
- hive - 将 Parquet 文件编辑为二进制文件
- javascript - AWS Dynamodb 没有通过节点 js 同步获取数据
- regex - 如果之间没有数字,则获取发生
- google-sheets - Google 工作表 IF 匹配两个条件,然后复制四个不同的列
- javascript - A* 算法有一个奇怪的错误
- php - 从另一个页面 Laravel 打开 Modal
- ravendb - 使用列表作为条件的 Ravendb 查询
- javascript - FullCalendar 如何停止选择反向背景事件
- msbuild - 从 Teamcity 更新 appsettings.json 文件
- php - 如何在整个站点中检查 cakephp2 中的致命错误