#javascript #arrays #reactjs #object
Вопрос:
export function getNoteKeys() {
const notesObject = {}
for (let i = 0; i < localStorage.length; i ) {
const key = localStorage.key(i)
const value = localStorage[key]
notesObject[key] = value
}
store.dispatch(SetActionForNotes(_.values(notesObject).sort(function(a, b) {
return a > b
})))
}
Текущий вывод, который я получаю для приведенного выше кода, таков…
{0: "a", 1: "b", 2: "c", 3: "d"}
Проблема с этим заключается в том, что при преобразовании этого в массив у меня нет возможности продолжать уникально идентифицировать каждый объект после удаления элемента, потому что индексы элементов изменяются, если один из них удаляется.
Я хочу установить для каждого набора ключей идентификатор для каждого полученного значения. У меня уже есть уникальные ключи, установленные в localstorage, и они нужны мне для уникальной идентификации каждой заметки в списке. Я пробовал много разных способов и не могу понять этого.
В качестве примера того, что я пытаюсь сделать…
const obj = [{id: 1, value: "a"}, {id: 2, value: "b"}...]
Комментарии:
1. Вы пытаетесь использовать динамические ключи объектов или просто пытаетесь сопоставить каждую пару ключ-значение из локального хранилища с новой формой объекта? Ваш пример вывода
obj
не соответствует тому, что делает код, и не является допустимым объектом JS. Непонятно, о чем вы просите. Кроме того, компаратор функции сортировки должен возвращать числовое значение, т. Е. [-1, 0, 1], а не логическое значение для указания порядка сортировки.2. Вы уже делаете это с помощью: notesObject[ключ] = значение
3.
{[{id: 1}, {value: "a"}], [{id: 2}, {value: "b"}]...}
недопустимый синтаксис объекта, вы пытаетесь получить что-то вроде[{ id: 1, value: 'a' }, { id: 2, value: 'b' }, ...]
в массиве?4. @DrewReese да, это то, к чему я стремлюсь. Я отредактирую свой вопрос, чтобы он был правильным.
5. Можете ли вы также включить пример значения localStorage, чтобы мы могли видеть, с чего вы начинаете?
Ответ №1:
Не уверен, в чем именно заключается ваша цель, но это приведет к желаемой трансформации.
Object.keys(localStorage).reduce((acc,key)=>{
return[...acc,{id:key,value:localStorage[key]}]
},[])
Комментарии:
1. Я предполагаю
value:asd[key]
, что был добавлен по ошибке, ваш ответ сработал, как только я удалилasd
Ответ №2:
Похоже, что localStorage
это объект (по сравнению с массивом), и если это так, вы также можете использовать Object.entries
и сопоставлять массив пар ключ-значение [{ id: 1, value: 'a' }, { id: 2, value: 'b' }, ...]
.
Object.entries(localStorage).map(([id, value]) => ({ id, value }))
const localStorage = {
0: 'a',
1: 'b',
2: 'c',
};
const res = Object.entries(localStorage).map(([id, value]) => ({ id, value }));
console.log(res);
Хотя, поскольку объекты являются просто ассоциативными массивами пар ключ-значение, он также работает с массивами.
const localStorage = ['a', 'b', 'c'];
const res = Object.entries(localStorage).map(([id, value]) => ({ id, value }));
console.log(res);