如何在发送到 API 之前使用输入字段中的值从 UI 动态创建 json 对象



我有一个 http.post 请求,它将对象作为参数发送,预期的格式如下所示:

 var searchQuery;
 var subj;
 var body;
 var startDate;
 var endDate;
   {
    "search": {
      "scope": [2,3,32],
      "type": "basic",
       "text": {
              "value": searchQuery, //string variable coming from UI
              "fields": [
                     subj, body     //string variable coming from UI
              ]
       },
      "date": {
        "type": "range",
        "from": startDate,     //string variable coming from UI
        "to": endDate          //string variable coming from UI
      }

问题是有些值是可选的,这意味着如果我不提供 searchQuery 作为字符串,那么整个键值应该是 ingnored,例如"value":如果我没有为该变量提供值,则不应将 searchqery 包含在 json 对象中。如果我不提供值,则开始日期和结束日期也是如此,则应从 json 中忽略日期。那么如何在来自 UI 的对象中动态包含或排除键对值,以及如何在发送到 post 请求之前构建该对象?

谁会是这样的东西?

 var search = {};
 search.text = { value: "", fields: [] };
 {value: "", fields: Array(0)}
 seach.text.value = "wes";
 search.text.value = "wes";
 search.text.fields.push("subject");
 search.text.fields.push("body"); 

您可以创建一个更灵活的函数。

var searchQuery = "";
var subj = null;
var body = "";
var startDate = "";
var endDate = null;
let obj = {
  "search": {
    "scope": [2, 3, 32],
    "type": "basic",
    "text": {
      "value": searchQuery, //string variable coming from UI
      "fields": [
        subj, body //string variable coming from UI
      ]
    },
    "date": {
      "type": "range",
      "from": startDate, //string variable coming from UI
      "to": endDate //string variable coming from UI
    }
  }
}
function removeNull(obj) {
  return Object.keys(obj).reduce((res, key) => {
    if (Array.isArray(obj[key])) {
      // If it's an array, filter out the null items
      res[key] = obj[key].filter((item) => item != null && item !== "");
    } else if (typeof obj[key] === "object" && obj[key] != null) {
      // If it's an object, call the function recursively
      res[key] = removeNull(obj[key]);
    } else if (obj[key] != null && obj[key] !== "") {
      // Otherwise, only add it to the results if it's not null
      res[key] = obj[key];
    }
    return res;
  }, {});
}
console.log(removeNull(obj));

最新更新