如何在javascript中查找和删除对象键和值?

躁狂之血

我在数组和对象中有两个变量,需要从允许的字段中删除不匹配的字段。这是数组和对象变量。

实际上,我的要求是需要创建仅包含响应数据中允许字段的单独对象。请提出解决方案。

let allowedFields = [
  "organization_id",
  "organization_name",
  "payload.offer.application_id",
  "payload.offer.user_id",
  "id",
  "candidate_id",
];

这是对象值如下

let data = {
  organization_id: 4002400004,
  organization_name: "Velocity Global Integration Sandbox",
  action: "offer_updated",
  payload: {
    offer: {
      id: 4524843004,
      application_id: 31948577004,
      user_id: 4123647004,
      version: 1,
      sent_on: null,
      resolved_at: "2022-05-19T06:21:25.084Z",
      start_date: "2022-05-17",
      notes: null,
      job_id: 4298940004,
      offer_status: "Accepted",
    },
    resume: {
      name: "manikandan",
    },
  },
};

数据对象只有 allowedFields 数组中存在的字段,期望输出如下

let output = {
  organization_id: 4002400004,
  organization_name: "Velocity Global Integration Sandbox",
  payload: {
    offer: {
      application_id: 31948577004,
      user_id: 4123647004,
    },
  },
};
SSM

方法一

  1. 循环遍历allowedPaths数组中的所有路径。

  2. 拆分路径.以获得键数组。

  3. 然后遍历键数组,并为每个键resData使用实际对象填充data对象。

const 
  allowedPaths = ["organization_id","organization_name","payload.offer.application_id","payload.offer.user_id","id","candidate_id"],
  data = {organization_id:4002400004,organization_name:"Velocity Global Integration Sandbox",action:"offer_updated",payload:{offer:{id:4524843004,application_id:31948577004,user_id:4123647004,version:1,sent_on:null,resolved_at:"2022-05-19T06:21:25.084Z",start_date:"2022-05-17",notes:null,job_id:4298940004,offer_status:"Accepted"},resume:{name:"manikandan"}}};

function filterData(data, allowedPaths) {
  const resData = {};
  allowedPaths.forEach((path) => {
    const pathArr = path.split(".");
    let actualDataObj = data;
    let resultantObj = resData;
    let toDetach;
    for (let i = 0; i < pathArr.length; i++) {
      const k = pathArr[i];
      if (!actualDataObj?.hasOwnProperty(k)) {
        if (toDetach) {
          delete toDetach.object[toDetach.key];
        }
        return;
      }
      if (i === pathArr.length - 1) {
        resultantObj[k] = actualDataObj[k];
      } else if (!resultantObj.hasOwnProperty(k)) {
        resultantObj[k] = {};
        if (!toDetach) {
          toDetach = { object: resultantObj, key: k };
        }
      }
      resultantObj = resultantObj[k];
      actualDataObj = actualDataObj[k];
    }
  });
  return resData;
}

console.log(filterData(data, allowedPaths));

方法二

您还可以递归循环对象中的所有属性data并创建具有允许属性的对象。

const 
  allowedPaths = ["organization_id","organization_name","payload.offer.application_id","payload.offer.user_id","id","candidate_id"],
  data = {organization_id:4002400004,organization_name:"Velocity Global Integration Sandbox",action:"offer_updated",payload:{offer:{id:4524843004,application_id:31948577004,user_id:4123647004,version:1,sent_on:null,resolved_at:"2022-05-19T06:21:25.084Z",start_date:"2022-05-17",notes:null,job_id:4298940004,offer_status:"Accepted"},resume:{name:"manikandan"}}};

function filterData(data, allowedPaths, parentPath = "") {
  return Object.entries(data).reduce((o, [k, v]) => {
    const path = `${parentPath ? parentPath + "." : ""}${k}`;
    if (allowedPaths.has(path)) {
      return { ...o, [k]: v };
    }
    if (v && typeof v === "object") {
      const subObj = filterData(v, allowedPaths, path);
      if (Object.keys(subObj).length) {
        return { ...o, [k]: subObj };
      }
    }
    return o;
  }, {});
}

console.log(filterData(data, new Set(allowedPaths)));

注意:allowedPaths上述两种解决方案还可以处理数组中存在无效路径的情况。以下是一些无效路径:

  • “ID”
  • “payload.offer.application_id.value”
  • “foo.bar.baz”

相关文件:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在javascript中获取对象的键和值?

Angular 从数组搜索中删除对象以查找键和值

如何在不删除键的情况下从对象和嵌套对象中重置值

从对象和键数组中查找值

如何通过JavaScript数组中的键和值查找对象的索引

如何删除json对象的键和值。

从对象数组中删除键和值

如何从javascript中的哈希中删除键和值

如何在JavaScript中查找(和删除重复项)对象数组的组合?

如何在Java中从对象获取键和值

如何在 ReactJS 中访问 JSON 对象键和值

如何在 Google Tagmanager 中显示对象的键和值?

如何在空对象中添加新的键和值?

如何在React组件中显示对象的键和值

如何从键和值中获取javascript对象的路径

如何从Javascript(Postman)中的JSON对象获取键和值

如何删除CKRecord中的键和对象?

Javascript 从对象中获取键和值

如何在JavaScript中获取JSON键和值?

Javascript 如何通过给定的键和值查找对象、字典数组的索引

在数组(JS)中查找对象的值(和键)

如何在javascript中比较和更改对象值数组与对象键

使用函数中的变量删除对象的键和值

如何在select中查找和删除optgroup和option?

如何在打字稿查找中匹配键和值

如何在Angular / TypeScript中声明键为日期和值为布尔值的对象

如何删除数组中具有相同键和值对的对象

如何在Ruby中从数组中查找,返回和删除最大值?

如何在JavaScript中使用特定的键和值遍历JSON对象?