【问题标题】:Vue.js computed properties, filter by object keyVue.js 计算属性,按对象键过滤
【发布时间】:2020-10-22 09:37:40
【问题描述】:

我正在处理一个包含多个网络接口的对象,其中接口的名称作为键,然后接口的信息作为值:

我想做的是一个 Vue.js 计算属性,以通过键过滤此对象并创建包含所有 GigabitEthernet 的数组,例如,以便我可以在我的模板中对其进行迭代。

我考虑过使用正则表达式,这是我使用并匹配我想放入单独数组中的接口:

const regex = /^(Te|GigabitEthernet|FastEthernet)+\s?([0-9]+\/){0,}[0-9]+$/g;

问题是从 API 接收的主要对象不是数组,所以我不能在它上面使用 find() 或 filter() 函数...

如果有人有任何想法,那就太好了,谢谢!

编辑:

尝试 Jaromanda 的解决方案后:

它只返回 2 行中的 1 行...

代码如下:

const regex = /^(Ten|GigabitEthernet|FastEthernet)\d+[/]?[\d+]?[/]?[\d+]?[.]?[\d+]?[/]?[\d+]?[/]?[\d+]?[:]?[\d+]?$/g;
      var rslt = {};
      Object.fromEntries(
        Object.entries(this.cmdResult).filter(([key, value]) => {
          if (regex.test(key)) {
            rslt[key] = value;
          }
        })
      );
      return rslt;

这是左侧当前输出和右侧预期输出的屏幕截图:

编辑 2:

当我使用关联键控制台记录正则表达式结果时会发生以下情况:

如您所见,只有 2 个是正确的......

【问题讨论】:

  • 使用Object.fromEntries(Object.entries(object).filter(([key, value]) => your code to filter))
  • 哇,这正是我所需要的,谢谢!
  • 它可以工作,但只有 1 个问题,它只返回 2 行中的 1 行,你能检查我的编辑吗?
  • 什么意思它只返回 2 行中的 1 行?
  • test 将在与全局标志 (g) 一起使用时推进正则表达式的 lastIndex 属性。由于这个原因,下一个匹配失败了,因为它开始到字符串太远而无法找到匹配项。从正则表达式中删除g 标志,为每个测试创建一个新的正则表达式,或者在每个test 之前将lastIndex 属性重置为0

标签: javascript vue.js


【解决方案1】:

这是另一种解决方案,使用地图。

const cmdResult = {
  "GigabitEthernet1/0/2": {name: ""},
  "GigabitEthernet1/0/3": {name: ""},
  "GigabitEthernet1/0/4": {name: ""}


}
const regex = /(GigabitEthernet||FastEthernet\d+(\.\d)*)/i;
const rslt = {};
Object.keys(cmdResult)
  .filter((key) => regex.test(key))
  .map(prop => rslt[prop] = cmdResult[prop])
    
console.log(rslt);

【讨论】:

  • 还是不行...你能看看我上次的编辑吗,我加了一个截图,真的很奇怪,即使在你的代码中sn-p GigabitEthernet1/0/3 也不见了...
  • @ryuzak1,好的,问题出在正则表达式模式上。你要过滤什么,props 包含 GigabitEthernet、FastEthernet..???
  • 是的,在这种情况下是 FastEthernet,GigabitEthernet,换句话说,我不希望最后两个 Vlan 出现在结果中,但奇怪的是当我使用在线正则表达式测试器测试正则表达式时,在我的代码中返回 false 的键正在与测试器一起使用
  • @ryuzak1,检查新的正则表达式模式。
  • 谢谢!我刚刚在 3limin4t0r 提到的正则表达式末尾将 g 替换为 i 并且它现在正在工作
猜你喜欢
  • 2019-08-08
  • 2016-12-09
  • 2021-11-08
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多