javascript - 从属性数组中搜索 Javascript 对象并将它们与一个值进行比较
问题描述
我的问题的最佳解释将是一个例子。我有一个对象数组,如下所示:[{a:"a",b:"",c:"c"}, {a:"a",b:"b",c:""}, {a:"",b:"b",c:"c"}, {d:""} ]
首先[a,b]
我想检查第一个数组中的对象是否包含第二个的属性,然后检查它们是否为空字符串(或未定义)以将它们设置为让说“某事”。最终版本:
[{a:"a",b:"something",c:"c"}, {a:"a",b:"b",c:""}, {a:"something", b:"b",c:"c"}, {a:"something", b:"something", d:""} ]
注意:我有工作代码,但看起来很丑,我想找到更好的方法
解决方案
您可以获得一组唯一的键并映射新条目的值。
const
array = [{ a: "a", b: "", c: "c" }, { a: "a", b: "b", c: "" }, { a: "", b: "b", c: "c" }, { d: "" }],
keys = ['a', 'b'],
result = array.map(o => Object.fromEntries(
[...new Set([...Object.keys(o), ...keys])].map(k => [k, keys.includes(k) ? o[k] || 'something' : o[k]])
));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
没有的解决方案Set
const
array = [{ a: "a", b: "", c: "c" }, { a: "a", b: "b", c: "" }, { a: "", b: "b", c: "c" }, { d: "" }],
keys = ['a', 'b'],
result = array.map(o => Object.assign(
{},
o,
...keys.map(k => ({ [k]: o[k] || 'something' }))
));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- sql - 为每组数据聚合一组结果
- php - 删除逗号分隔字符串php中的字符
- typescript - 传递索引类型时,Typescript 的多余属性检查失败
- debugging - Step in, Step out 和 Step Over 有什么区别?
- eclipse - 迁移到 Eclipse photon 时,Eclipse RCP 最大化编辑器不显示
- android - 如何修复 EBUSY:Ionic 3 中的资源繁忙或锁定?
- javascript - 如何在 javascript 中使用 fetch api 从 C# Web 方法获取响应?
- javascript - js - querySelector 在伪类 ::before 中选择和编辑样式
- html - 在 org.apache.pdfbox.pdmodel.graphics.color.PDPattern.toRGB 获取 java.lang.UnsupportedOperationException
- python - 列表字典的键到行枚举、制表符分隔的 csv 文件