【问题标题】:Filtering an object to contain only keys that exist in an array of objects过滤对象以仅包含对象数组中存在的键
【发布时间】:2021-08-05 17:22:16
【问题描述】:

我的大脑目前正在寻找一种更好的方法来做到这一点,它遵循我的 eslint 设置,该设置说我试图做的是从对象数组中不存在的对象中删除键,并且我有当前有效的代码但这让 eslint 很生气,所以我不能用这个:

fieldData = recipeOutputFields(z, bundle);

  return promise.then((response) => response.json.response.map((item) => {
    const temp = item;

    temp.id = temp.customer_id;

    const diff = {};

    for (const [key, value] of Object.entries(temp)) {
      fieldData.some((el, val) => {
        if (el.key === key) {
          diff[key] = value;
        }
      });
    }

也就是说,这里有一些我正在使用的示例

let theObjectINeedToRemoveKeysFrom = {
   key1: "test",
   key2: "test2",
   key3: "test",
   key4: "test",
}

let theArrayOfObjectsToFilterBy = [
    {
       key: "key1",
       type: "string",
    },
    {
       key: "key2",
       type: "string",
    },
    {
       key: "key4",
       type: "int",
    },
]

预期的输出是这样的:

let expectedResult = {
   key1: "test",
   key2: "test2",
   key4: "test",
}

由于对象数组中不存在 key3,它将从对象中删除。 有人对如何将我的功能转换和简化为 eslint 喜欢的功能有任何建议吗?

ES Lint 错误:

【问题讨论】:

    标签: javascript arrays json object


    【解决方案1】:

    您可以使用Object.fromEntries 将 Object.entries 数组包装回一个对象中。

    let temp = {
       key1: "test",
       key2: "test2",
       key3: "test",
       key4: "test",
    };
    
    let fieldData = [
        {
           key: "key1",
           type: "string",
        },
        {
           key: "key2",
           type: "string",
        },
        {
           key: "key4",
           type: "int",
        },
    ];
    
    const diff = Object.fromEntries(
      Object.entries(temp).filter(([k, v]) => 
        fieldData.some(({key}) => k === key)
      )
    );
    
    console.log(diff);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-15
      • 2017-01-28
      • 2019-07-30
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多