【问题标题】:Update values on multi level nested Object with javascript使用 javascript 更新多级嵌套对象的值
【发布时间】:2019-01-31 16:35:26
【问题描述】:

我在 sessionStorage 上有一个对象,我需要更新用户输入的值。我能够更新对象的根,但不能更新嵌套在更深层次上的值。

request('http://localhost:7474/graphql/', query).then(data => {...}

sessionStorage.setItem('queryData', JSON.stringify(data));

function update(value){
    let prevData = JSON.parse(sessionStorage.getItem('queryData'));

    Object.keys(value).forEach(function(val, key){
        prevData[val] = value[val];
    });

    sessionStorage.setItem('queryData', JSON.stringify(prevData));
}

update({ maritalStatus: "single" });

所以 maritalStatus 最终被添加而不是被替换,我必须替换值:

Object: [,...]
   0: {id: "x", maritalStatus: "married"} //want to replace this value here
   maritalStatus: "single"  // this is where the value is been written

【问题讨论】:

  • prevData{id: "x", maritalStatus: "married"}?或者那个变量是什么?
  • 先更新一下如何构建Object并设置第一个sessionStorage Object,prevData是一个相当大的Object,有多个嵌套值

标签: javascript html javascript-objects session-storage


【解决方案1】:

您在存储中的数据是一个数组。因此,像prevData[val] = value[val]; 一样更新它的方式是将另一个属性添加到索引为maritalStatus 且值为"single" 的数组中。索引0 处的对象未被触及。

我建议的解决方法是在更新调用中也包含id。然后循环遍历 storage 中的数组,寻找 id 匹配的对象。

一旦 id 匹配更新该对象,或者如果没有找到 id 匹配则记录。

let dataInStorage = [{
  id: "x",
  maritalStatus: "married"
}];

function update(updateObj) {
  let prevData = dataInStorage;
  let id = updateObj.id;

  dataInStorage.forEach(function(data) {
    if (data.id === id) {
      Object.keys(updateObj).forEach(function(key, index) {
        data[key] = updateObj[key];
      });
    } else {
      console.log(`did not find object with id: ${id}`);
    }
  });
  console.log(prevData)
  //sessionStorage.setItem('queryData', JSON.stringify(prevData));
}

update({
  id: "x",
  maritalStatus: "single"
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2023-01-22
    • 2020-08-07
    • 2015-06-25
    • 1970-01-01
    相关资源
    最近更新 更多