Jquery для извлечения нескольких ключей с одинаковым начальным шаблоном из LocalStorage

Предположим, я храню 5 данных, используя localStorage.setItem():

{abc1:да, abc2:да, abc3:да, uvw:нет, xyz:нет}

Для извлечения мы можем использовать localStorage.getItem(). Но здесь мне нужно получить все пары ключ-значение, имя ключа которых начинается со строки abc, т.е. получить ключи "abc1", "abc2" и "abc3".

Это то, что я пробовал:

var a = {}, 
keys = Object.keys(localStorage),
l = keys.length;
        
while (l--) { 
  a[keys[l]] = localStorage.getItem(keys[l]);
  if(a[keys[l]].startsWith('abc') == "true") {
    alert(a[keys[l]]);
  }
}

 

Помогите мне, пожалуйста.


person Abraham John    schedule 28.08.2020    source источник
comment
Это действительно 5 разных элементов локального хранилища, или вы сохранили один элемент с кодировкой JSON этого объекта?   -  person Barmar    schedule 28.08.2020
comment
@Barmar Это 5 разных предметов   -  person Abraham John    schedule 28.08.2020
comment
startsWith() не возвращает строку. Он возвращает логическое значение true или false.   -  person Barmar    schedule 28.08.2020
comment
Просто напишите if(a[keys[l]].startsWith('abc')) без сравнения == "true".   -  person Barmar    schedule 28.08.2020


Ответы (2)


У вас есть две проблемы.

  1. startsWith() возвращает логическое значение, а не строку.
  2. Вы проверяете, начинается ли значение с abc, а не с ключа.
var a = {};
Object.entries(localStorage).forEach(([key, value]) => {
  if (key.startsWith("abc")) {
    a[key] = value;
  }
});
console.log(a);
person Barmar    schedule 28.08.2020
comment
Я не получил то, что хотел. Я вижу только [объект Объект]. - person Abraham John; 28.08.2020
comment
Я не думаю, что какой-либо из моих кодов вызовет это. Это произойдет, если вы попытаетесь сохранить объекты в локальном хранилище без предварительного преобразования их в JSON. - person Barmar; 28.08.2020
comment
См. stackoverflow.com/questions/4750225/ - person Barmar; 28.08.2020

Я бы предложил что-то вроде:

var a = {},
  keys = Object.keys(localStorage);

$.each(keys, function(i, k) {
  if (k.startsWith("abc")) {
    a[k] = localStorage[k];
  }
});

console.log(a);

Тестовый пример

var local = {
  "abc1": "yes",
  "abc2": "yes",
  "abc3": "yes",
  "uvw": "no",
  "xyz": "no"
};
var a = {},
  keys = Object.keys(local);

$.each(keys, function(i, k) {
  if (k.startsWith("abc")) {
    a[k] = local[k];
  }
});

console.log(a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Это приводит к созданию нового объекта только с ожидаемыми парами ключ-значение.

Альтернативный

var local = {
  "abc1": "yes",
  "abc2": "yes",
  "abc3": "yes",
  "uvw": "no",
  "xyz": "no"
};
var a = {};

$.each(local, function(k, v) {
  if (k.startsWith("abc")) {
    a[k] = v;
  }
});

console.log(a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

person Twisty    schedule 28.08.2020