首页 > 解决方案 > 从属性数组中搜索 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:""} ] 注意:我有工作代码,但看起来很丑,我想找到更好的方法

标签: javascripttypescript

解决方案


您可以获得一组唯一的键并映射新条目的值。

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; }


推荐阅读