0

如果一个对象存储在离子存储的数组中,我正在尝试修改一个部分。当 a === '4' 时,我想将数据 b 更改为“111”

key : "array"
value : "[{"a":"1","b":"2","c":"3"},{"a":"4","b":"5","c":"6"},{"a":"7","b":"8","c":"9"}]"

modifyArray() {
    // tslint:disable-next-line: forin
    for (let i in this.array) {
      this.storage.get('array').then(res => {
        let y = JSON.parse(res);
        let r = JSON.stringify(JSON.parse(res)[i]);

        console.log('y : ' + JSON.stringify(y));
        console.log('r : ' + r);

        if (JSON.parse(r).a === '4') {
          JSON.parse(r).b = '111';
        }
        this.storage.set('array', JSON.stringify(JSON.parse(r)));
      });
    }
  }

执行我的函数后,我得到了:

key : "array"
value : "{"a":"7","b":"8","c":"9"}"

我想获得:

key : "array"
value : "[{"a":"1","b":"2","c":"3"},{"a":"4","b":"111","c":"6"},{"a":"7","b":"8","c":"9"}]"
4

2 回答 2

1

避免不必要的多次解析和字符串化调用。简单地说,解析一次您的值,然后您可以使用 ['a'] 或 .a 访问它们

这是您想要实现的目标的工作示例:

let parsedValue = JSON.parse(res);
console.log('After parsing');
console.log(parsedValue);

for (let eachItem of parsedValue)
{

  if (Number(eachItem['a']) == 4)
  {
    eachItem['b'] = "111";
    console.log('Changed B' + eachItem['b']);
  }
}

console.log('After Changing');
console.log(parsedValue);
于 2019-09-20T09:10:11.803 回答
0

在您的代码中,只会存储最后一次执行的 for 循环结果。您需要创建一个空数组,并且需要在每次执行后推送。一旦循环的所有执行完成,您就可以存储在离子本地存储中。

这可以通过以下两种方法来实现。

方法一:

modifyArray() {
    var final_push = [];
    for (let i in this.array) {
      this.storage.get('array').then(res => {        
        let y = JSON.parse(res);        
        if (y[i]['a'] === '4') {
          y[i]['b'] = '111';
        }
        final_push.push(y);        
      });
    }
    this.storage.set('array', JSON.stringify(JSON.parse(final_push)));
}

方法二:

modifyArray() {
    var final_push = [];
    for (let i in this.array) {
      this.storage.get('array').then(res => {        
        let y = JSON.parse(res);        
        if (y[i]['a'] === '4') {
          y[i]['b'] = '111';
        }
        final_push.push(y);  
        if(i == this.array.length - 1){
          this.storage.set('array', JSON.stringify(JSON.parse(final_push)));
        }
      });
    }

}
于 2019-09-20T10:47:33.480 回答