Заменить значение в объекте - PullRequest
1 голос
/ 29 апреля 2019

Я хочу заменить некоторые значения в моих данных на основе ключа, у меня есть следующий объект:

const data = {
  data: {
    config: {
      bioObject: {
        dataBioOne: 1,
        dataBioTwo: "B",
        dataBioThree: "A",
        dataBioFour: 2,
        dataBioFive: 2,
        dataBioSix: 3,
        dataBioSeven: 1
      },
      pinObject: {
        dataPinOne: 5,
        dataPinTwo: "B0",
        dataPinThree: "A0",
        dataPinFour: 6
      },
      appletRegister: [
        {
          aid: "A",
          filterApplet: null,
          bioApplet: false,
          pinApplet: false,
          defaultApplet: true
        },
        {
            aid: "A",
            filterApplet: null,
            bioApplet: false,
            pinApplet: false,
            defaultApplet: true
          },
      ]
    },
    initialization: {
      defaultPin: "1111"
    }
  }
};

И у меня есть два других объекта, содержащихся в вышеуказанном объекте - bioObject и pinObjectсвойства.Я хочу перебрать объект и заменить эти два ключа и их значения новыми элементами.

Моя функция выглядит так:

 handleSChange = (bio, pin) => {
    let dataBio = bio;
    let dataPin = pin;
    let profile = this.state.data;
    console.log(Object.keys(profile.config));

    let obj;
    obj = Object.keys(profile.config).forEach((el) => {
      if (el == "bioObject") {
        el.replace(dataBio)
      }
      if (el == "pinObject") {
        el.replace(dataPin)
      }
    })
    console.log(obj);   
  }

Но, насколько я вижу, я заменяю только ключине ценности.Если я поменяю ключи на значения, то не смогу пройти по ключу, поэтому не смогу заменить эти данные.У кого-нибудь есть идеи, как заменить данные в этих двух местах?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Есть несколько способов сделать это. Ниже вы найдете один метод. Другой использует синтаксис Object.assign() или ES6. ...object.

const data = {
    config: {
      bioObject: {
        dataBioOne: 1,
        dataBioTwo: "B",
        dataBioThree: "A",
        dataBioFour: 2,
        dataBioFive: 2,
        dataBioSix: 3,
        dataBioSeven: 1
      },
      pinObject: {
        dataPinOne: 5,
        dataPinTwo: "B0",
        dataPinThree: "A0",
        dataPinFour: 6
      },
      appletRegister: [
        {
          aid: "A",
          filterApplet: null,
          bioApplet: false,
          pinApplet: false,
          defaultApplet: true
        },
        {
            aid: "A",
            filterApplet: null,
            bioApplet: false,
            pinApplet: false,
            defaultApplet: true
          },
      ]
    },
    initialization: {
      defaultPin: "1111"
    }
};

handleSChange = () => {
    let profile = data;

    let obj;
    obj = Object.keys(profile.config).forEach((el) => {
      if (el == "bioObject") {
        profile.config[el] = {
          /* Put the new properties here if you want overwrite the existing object */
          newProp: 'newProp'
        };
      }
      if (el == "pinObject") {
        profile.config[el] = {
          /* Put the new properties here if you want overwrite the existing object */
          newProp: 'newProp'
        };
      }
    })   
 }
 
 handleSChange();
 console.log(data);
0 голосов
/ 29 апреля 2019

Поскольку оказывается, что вы используете компонент класса React с состоянием, должно работать следующее:

this.setState({
    data: {
        config: {
            ...profile,
            bioObject: bio,
            pinObject: pin
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...