代码之家  ›  专栏  ›  技术社区  ›  Sasha

Javascript-基于键在对象中查找并提取找到的数据

  •  0
  • Sasha  · 技术社区  · 7 年前

    我有一个 本地存储

    对象示例:

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

    以下是我获取搜索参数的方式:

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

    例如,我想提取所有 关键值 ,其中键以开头 代理| ,在单独的数组或对象中。

    4 回复  |  直到 7 年前
        1
  •  2
  •   ozbey    7 年前

    可以使用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);
    
        2
  •  1
  •   Dimitri    7 年前

    组合 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));
    
        3
  •  1
  •   Salketer    7 年前

    只需循环遍历对象的所有属性,测试道具是否与正则表达式匹配,如果匹配,则将其添加到结果中。

    let result = {};
    for(let prop in storage){
        if(prop.match(regex)){
             result[prop] = storage[prop];
        }
    }
    
        4
  •  1
  •   Sebastian Simon SamB    7 年前
    1. Object.entries
    2. 使用筛选条目 Array#filter 并用 test .
    3. 将所有内容重新组合成一个对象 Array#reduce

    我还使用了分解参数 [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), {});