javascript - 请求有效负载 - 可选的数据发送

标签 javascript reactjs axios

请求负载中创建新用户,我正在发送姓名、姓氏、职位、工作、colorEye。如何完成这项工作 colorEye(空字符串)是可选的。如果job、colorEye为空,则仅发送name、lastname、position。是否可以选择在请求负载中发送数据?如果 this.state.eye 为空,我会发送姓名、姓氏、职位和工作。当 this.state.job 为空时,我发送姓名、姓氏、职位和 colorEye。当 this.state.jobthis.state.colorEye 为空时,我发送姓名、姓氏、职位。当 this.state.jobthis.state.colorEye 具有值时,我发送 name、lastname、position、job、colorEye

像这样做:

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: 'React',
      lastname: 'aaaaa',
      position: 'bbbbb',
      job: '',
      colorEye: ''
    };
  }

  createNewUser = () => {
    const {
      name,
      lastname,
      position,
      job,
      colorEye
    } = this.state;

    const newUser = {};

    if(job && colorEye) {
        const newUser= {
          name,
          lastname,
          position,
          job,
          colorEye
        };
    } else if(job) {
        const newUser= {
          name,
          lastname,
          position,
          job
        };
   } else if(colorEye) {
        const newUser= {
          name,
          lastname,
          position,
          colorEye
        };
   }

    this.addUser(newUser);
  }


  addUser = newUser=> {
    const url = 'api/v1/users';

    axios({
      method: 'post',
      url,
      data: newUser,
      params
    })
      .then(res => {

      })
      .catch(error => {

      });
  };

  render() {
    return (
      <div>

      </div>
    );
  }
}

最佳答案

首先考虑在服务器上解决这个问题。

否则您可以使用delete operator 。我准备了一个fiddle,看https://jsfiddle.net/jdwkLctr/

function getClearedUser(user) {
  const clearedUser = Object.assign({}, user);

  if (clearedUser.job === "") {
      delete clearedUser.job;
  }

  if (clearedUser.colorEye === "") {
    delete clearedUser.colorEye;
  }

  return clearedUser;
}

const user = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: 'The best company in the world',
  colorEye: 'brown'
};

const userWithoutJob = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: '',
  colorEye: 'brown'
};

const userWithoutEyeColor = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: 'The best company in the world',
  colorEye: ''
};

const userWithoutEverything = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: '',
  colorEye: ''
};

console.log("User:", getClearedUser(user));
console.log("User without job:", getClearedUser(userWithoutJob));
console.log("User without eye color:", getClearedUser(userWithoutEyeColor));
console.log("User without everything:", getClearedUser(userWithoutEverything));

此外,您还可以过滤 Object.entries使用自定义函数并使用 Object.fromEntries 创建新对象.

fiddle :https://jsfiddle.net/3zta4dmx/

function getClearedUser(user) {
  return Object.fromEntries(
    Object.entries(user).filter(([key, value]) => {
      if (key === "name" || key === "lastname" || key === "position") {
        return true;
      }

      return value !== "";
    })
  );
}

const user = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: 'The best company in the world',
  colorEye: 'brown'
};

const userWithoutJob = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: '',
  colorEye: 'brown'
};

const userWithoutEyeColor = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: 'The best company in the world',
  colorEye: ''
};

const userWithoutEverything = {
  name: 'Saveli',
  lastname: 'Tomac',
  position: 'JavaScript Developer',
  job: '',
  colorEye: ''
};

console.log("User:", getClearedUser(user));
console.log("User without job:", getClearedUser(userWithoutJob));
console.log("User without eye color:", getClearedUser(userWithoutEyeColor));
console.log("User without everything:", getClearedUser(userWithoutEverything));

关于javascript - 请求有效负载 - 可选的数据发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231266/

相关文章:

JavaScript .split

javascript - css - translate3d 会导致元素在移动浏览器中可拖动吗?

javascript - 将焦点设置在受控组件中表单的输入字段上

reactjs - React,Redux-Saga : Which is the best way to handle error in saga and inform component to display that error

node.js - 如何在 Reactjs 中加密请求负载

javascript - 脚本运行失控

javascript - 如何获取$self的子元素,jquery就可以

javascript - 如何使用 setTimeout 来限制获取请求的时间?

javascript - axios无法在android上上传文件但在iOS上工作

javascript - 如何在不使用 axios 拦截器进行整页刷新的情况下刷新 vuejs 中的 accesstoken