Как проверить повторяющийся массив, чтобы предотвратить хранение в localStorage - PullRequest
1 голос
/ 19 июня 2020

Когда я нажимаю кнопку «добавить в избранное», я хочу сохранить его данные как значение localStorage только один раз.
Если он существует в localStorage, второй щелчок не должен иметь никакого эффекта (только предупреждение).

Как это сделать в angular ioni c?

вот мое рабочее приложение и пример кода
https://weather4133.netlify.app/
https://github.com/Novian227/WeatherAppIonic

save() {
  let data = [];
  let w = JSON.parse(localStorage.getItem('fav'));

  if (w != null) {
    for (let i=0; i<w.length; i++) {
      data.push(w[i]);
    }
  }

  data.push(this.weather);
  localStorage.setItem('fav', JSON.stringify(data));
}

1 Ответ

2 голосов
/ 19 июня 2020

РЕДАКТИРОВАТЬ: Итак, this.weather - это объект, а не строка.

Использование indexOf было бы возможным, если бы ваш массив содержал только примитивные типы, такие как числа, строки и c. но поскольку ваш массив содержит объекты, он требует другого подхода.

Поэтому вам нужно использовать findIndex , чтобы проверить наличие объекта в массиве.

save() {
  let data    = JSON.parse(localStorage.getItem('fav')) || [],
      isExist = data.findIndex((obj) => {
        // Compare all keys here to validate "uniqueness"
        // You can add many keys as you like
        return obj.date == this.weather.date && obj.temp == this.weather.temp; 
      }) != -1;

  if (isExist) {
    // show alert here 
  } else {
    data.push(this.weather);
    localStorage.setItem('fav', JSON.stringify(data));
  }
}
...