2017-10-06 78 views
0

我有一个localstorage对象,我需要找到所有数据并根据键提取它。对象的Javascript - 根据键找到对象并提取找到的数据

例子:

Storage { 
    agency-list|radio-radio2: "true", 
    agency|radio-radio1: "true", length: 2 
.....} 

这是我得到的搜索帕拉姆:

let formID = $('form').attr('id'); 
let regex = new RegExp("^" + formID + "|"); 

例如,我想提取所有键值,这里的关键是从机构开始|,在单独的数组或对象中。

这个问题的最佳方法是什么?

回答

1

组合Object.keys()filter可以帮助您:

let formID = $('form').attr('id'); 
let regex = new RegExp(`^${formID}|`); 
const Storage = { 
     "agency-list|radio-radio2": "true", 
     "agency|radio-radio1": "true", 
     length: 2 
}; 
const agencies = Object.keys(Storage).filter(key => regex.test(key)); 
+0

你是完全正确的,让我们来纠正这个问题 – Dimitri

1

简单地遍历所有对象的属性,测试prop是否匹配正则表达式,如果它符合,则将其添加到结果中。

let result = {}; 
for(let prop in storage){ 
    if(prop.match(regex)){ 
     result[prop] = storage[prop]; 
    } 
} 
2

您可以使用Object.keys()方法来遍历你的钥匙

let Storage = { 
"agency-list|radio-radio2": "true", 
"agency|radio-radio1": "true", 
length: 2 } 
let otherStorage = []; 
Object.keys(Storage).forEach(key=>{ 
    if(key.startsWith("agency|")){ 
     otherStorage.push(key); 
    } 
}); 
console.log(otherStorage); 
1
  1. 把你的存储成一个阵列与Object.entries
  2. 使用Array#filter筛选条目并使用test检查正则表达式。
  3. 把一切都回到一起成一个对象与Array#reduce

我也使用解构参数[key, value],由于Object.entries输出一切作为[key, value]数组的数组。

let formID = $('form').attr('id'); 
let regex = new RegExp("^" + formID + "|"); 

Object.entries(localStorage) 
    .filter(([key, value]) => regex.test(key)) 
    .reduce((obj, [key, value]) => (obj[key] = value, obj), {});