问题描述
考虑到我正在使用localStorage.setItem()
存储5个数据:
{“ 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]]);
}
}
请帮助我。
解决方法
您有两个问题。
-
startsWith()
返回一个布尔值,而不是字符串。 - 您正在检查值是否以
abc
而不是键开头。
var a = {};
Object.entries(localStorage).forEach(([key,value]) => {
if (key.startsWith("abc")) {
a[key] = value;
}
});
console.log(a);
,
我建议类似的东西
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,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","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>