обновить массив объектов в localstorage, не оставляя нулевого значения - PullRequest
0 голосов
/ 15 февраля 2020

Итак, у меня есть 3 поля ввода текста, входные данные я храню в локальном хранилище в виде массива объектов. Выглядит так:

[{name: " Name1", description: "Description1", comment: "Comment1"},…]
0: {name: " Name1", description: "Description1", comment: "Comment1"}
1: {name: " Name2", description: "Description2", comment: "Comment2"}
2: {name: " Name3", description: "Description3", comment: "Comment3"}

Мне нужно иметь возможность удалить любую запись, которую я выберу, и обновить локальное хранилище.

После JSON .parse я получаю объект javascript, а не массив. Если я использую delete [X], он оставляет ноль -

[null, {name: " Name2", description: "Description2", comment: "Comment2"},…]
0: null
1: {name: " Name2", description: "Description2", comment: "Comment2"}
2: {name: " Name3", description: "Description3", comment: "Comment3"} 

Есть ли способ избежать этого, мне нужно, чтобы запись полностью исчезла и обновил индексы, чтобы "name2 ..." получило индекс 0 и т. Д. вкл.

Есть ли способ сделать это? Спасибо!

Ответы [ 5 ]

0 голосов
/ 15 февраля 2020

Всегда обязательно получайте значения, обновляйте массив и устанавливайте его заново. Надеюсь, это поможет.

const data = [
  { name: " Name1", description: "Description1", comment: "Comment1" },
  { name: " Name2", description: "Description2", comment: "Comment2" },
  { name: " Name3", description: "Description3", comment: "Comment3" }
];

const setLS = arr => localStorage.setItem("my_data", JSON.stringify(arr));

const getLS = () => JSON.parse(localStorage.getItem("my_data"));

const removeItemLS = obj => {
  const current = getLS();
  setLS(current.filter(item => item.name !== obj.name));
};

setLS(data);
getLS();
// (3) [{…}, {…}, {…}]
removeItemLS({ name: " Name2" });
getLS();
// (2) [{…},{…}]
0 голосов
/ 15 февраля 2020

Если вы хотите удалить элементы из массива, лучше использовать метод массива

array.splice(index, 1);

Если вы хотите удалить элемент из объекта

delete array[x]

let newArray = array.filter(x => x)

, чтобы newArray был без нуля значение

0 голосов
/ 15 февраля 2020

Вместо того, чтобы изменять массив, отфильтруйте его: Пример:

const newArr = [...].filter(o => o.name != <name you want to remove>)
0 голосов
/ 15 февраля 2020

У вас есть несколько вариантов сделать это.

Опция 1: .splice ()

Метод splice () изменяет содержимое массива удаляя или заменяя существующие элементы и / или добавляя новые элементы на месте.

const data = [{name: " Name1", description: "Description1", comment: "Comment1"}, {name: " Name2", description: "Description2", comment: "Comment2"}, {name: " Name3", description: "Description3", comment: "Comment3"}];

const s = data.splice(1,1);

console.log(data, 'removed: =>', s);

Опция 2: .filter ()

Метод filter () создает новый массив со всеми элементами, которые пройти тест, реализованный предоставленной функцией.

const data = [{name: "Name1", description: "Description1", comment: "Comment1"}, {name: " Name2", description: "Description2", comment: "Comment2"}, {name: " Name3", description: "Description3", comment: "Comment3"}];


console.log(data.filter(item => item && item.name !== 'Name1'))

Вариант 3: Петли

0 голосов
/ 15 февраля 2020

Вы можете использовать Фильтр для удаления null элементов массива.

let newVals = [null, {
  name: " Name2",
  description: "Description2",
  comment: "Comment2"
}, {
  name: " Name3",
  description: "Description3",
  comment: "Comment3"
}].filter(x => x);
console.log(newVals);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...