我正在检索以JSON开头的localstorage字符串:
[
{
"Key01": "Val01",
"Key02": "Val02",
"Key03": "Val03",
"KeyInfo1": [
{
"KIName": "KIVal01",
"KIId": "KIVal02"
}
],
"KeyInfo2": [
{
"KIName": "KIVal03",
"KIId": "KIVal04"
}
],
"KeyInfo3": [
{
"KIName": "KIVal05",
"KIId": "KIVal06"
}
]
}
]
并将其转换回JSON数组:
var stuff = localStorage.getItem("ls");
var testparse = $.parseJSON(stuff);
我希望能够运行jQuery $.each()
循环来仅隔离名称以' KeyInfo'并梳理他们的数据。我已经使用了jQuery"属性启动选择器" HTML元素的功能,包含ID或表单名称等准备选择器,例如:input[name^='news']
。 JSON有这样的选择器吗?循环如:
$.each(testparse[0]."[key^='KeyInfo']"[0], function(key, value){
console.log(key + ' = ' + value);
});
可以理解地抛出Uncaught SyntaxError: Unexpected string
,因为在我将自己设置为与$ .each()循环关联的函数中的属性之前,我尝试访问密钥。这种情况可以起作用吗?如果没有,有人可以推荐一种方法来隔离那些以" KeyInfo"开头的数组。
答案 0 :(得分:1)
像这样使用jQuery.map ..
var filtered = $.map( test[0], function( n, i) {
return /^keyInfo/i.test(i) ? n : null;
});
$.each(filtered , function(key, value){
console.log(value);
});
答案 1 :(得分:1)
您可以对每个密钥进行简单检查,看看它们是否以“KeyInfo”开头。
$.each(testparse[0], function(key, value){
if (key.indexOf('KeyInfo') === 0) {
console.log(key + ' = ' + value);
}
});
答案 2 :(得分:1)
你基本上会得到没有不以keyInfo开头的键的原始对象。
var testparse = [
{
"Key01": "Val01",
"Key02": "Val02",
"Key03": "Val03",
"KeyInfo1": [
{
"KIName": "KIVal01",
"KIId": "KIVal02"
}
],
"KeyInfo2": [
{
"KIName": "KIVal03",
"KIId": "KIVal04"
}
],
"KeyInfo3": [
{
"KIName": "KIVal05",
"KIId": "KIVal06"
}
]
}
]
testparse = $.map(testparse[0], function(value, key) {
if (key.match(/^KeyInfo/)) {
var res = {}
res[key] = value
return res
}
})
console.log(testparse)
答案 3 :(得分:1)
var keys = Object.keys(testparse[0]);
var result = keys.filter(function(val){
return !val.indexOf('KeyInfo'); //Isolate/Filter keys
}).map(function(val, i){
var res = {}; //Create a new object
res[val] = testparse[0][val] //Reassign the key/value pairs
return res;
//Or maybe do your stuff instead.
})
console.log(result);
/*[ { KeyInfo1: [ { KIName: 'KIVal01', KIId: 'KIVal02' } ] },
{ KeyInfo2: [ { KIName: 'KIVal03', KIId: 'KIVal04' } ] },
{ KeyInfo3: [ { KIName: 'KIVal05', KIId: 'KIVal06' } ] } ]*/
编辑: 注意array.map和array.filter是ECMAScript 5的一部分,不适用于旧版浏览器。您可以将这些更改为等效的$ .map和$ .filter的jquery。 Unfortunatley我的实验室里面没有jquery可用。 ;)