Изменить часть объекта, хранящегося в массиве в Ionic Storage - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь изменить деталь, если объект хранится в массиве в Ionic Storage.Я хотел бы изменить данные b на "111", когда a === '4'

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"}]"

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Избегайте ненужного многократного разбора и строковых вызовов.Просто проанализируйте свое значение один раз, и затем вы сможете получить к ним доступ, используя ['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);
0 голосов
/ 20 сентября 2019

В вашем коде будет сохранено только последнее выполнение результата цикла for.Вам нужно создать пустой массив и нажимать после каждого выполнения.когда все выполнение цикла завершено, вы можете сохранить его в локальном хранилище.

Это может быть достигнуто следующими двумя способами.

Метод 1:

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)));
}

Способ 2:

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)));
        }
      });
    }

}
...