【问题标题】:Check if a string exists in another string having a specific pattern in Javascript检查一个字符串是否存在于另一个在 Javascript 中具有特定模式的字符串中
【发布时间】:2019-02-28 21:30:08
【问题描述】:

这是我的代码:

var obj2 = [{
  "name": "4134",
  "calls": [

  ]
}]

    var obj3 = [{ Channel: 'SIP/4134-0004462a',
        Accountcode: '7013658596'},
      { Channel: 'DAHDI-il-4134-sa',
        Accountcode: '07717754702',
      }]

var func = (obj2, obj3) => {
    obj2.forEach((a) =>
      obj3.forEach((b) => {
        if (b.Channel.includes(a.name)) a.calls = (a.calls || []).concat(Object.assign({}, { MobileNo: b.Accountcode}));

      })
    );
};

func(obj2, obj3);
console.log(JSON.stringify(obj2));

链接到我的JS-Fiddle 这是我当前的输出:

[
  {
    "name": "4134",
    "calls": [
      {
        "MobileNo": "7013658596"
      },
      {
        "MobileNo": "07717754702"
      }
    ]
  }
]

在上面的代码中,我有两个对象。在obj2 中,名称键的值是4134。在我的代码中,我使用if (b.Channel.includes(a.name)) 检查obj3 中Channel 键的值中是否存在4134。我在这里使用了包含功能。因此,如果 obj3 中 Channel 的值中存在 4134,那么当匹配时,Accountcode 将被推入obj2 的调用数组中。如您所见,频道之一是SIP/4134-0004462a,另一个是DAHDI-il-4134-sa。它们都包含 4134 但我只想比较 Channel 中包含文本 SIP 的值。正如您在上面的输出中看到的那样,obj3 中两个对象的 Accountcode 都被推送到 obj2 中的调用数组,因为两个通道都包含 4134。这不是我想要的。

这是我想要的输出:

[
  {
    "name": "4134",
    "calls": [
      {
        "MobileNo": "7013658596"
      }
    ]
  }
]

在上述输出中,4134 仅与包含文本 SIP 的 Channel 匹配。 如何使用 include 函数?

【问题讨论】:

标签: javascript arrays sorting


【解决方案1】:

更改if (b.Channel.includes(a.name))...if(b.Channel.includes(a.name) && b.Channel.match('SIP'))...

【讨论】:

  • 但是如果模式包含 SIP,来自 obj2 的 name 键的值也应该存在于 Channel 键中。我的数组中有很多对象。所以 Channel 应该包含 SIP 以及 obj2 的 name 键的值
  • 我编辑了我的答案。也许这就是您正在寻找的。​​span>
  • 谢谢。这也将起作用。我在下面回答了我的问题
【解决方案2】:

我通过在 if 语句中再使用一个条件解决了这个问题

if (b.Channel.includes('SIP') && b.Channel.includes(a.name))

最终代码

var obj2 = [{
  "name": "4134",
  "calls": [

  ]
}]

    var obj3 = [{ Channel: 'SIP/4134-0004462a',
        Accountcode: '7013658596'},
      { Channel: 'DAHDI-il-4134-sa',
        Accountcode: '07717754702',
      }]

var func = (obj2, obj3) => {
    obj2.forEach((a) =>
      obj3.forEach((b) => {
        if (b.Channel.includes('SIP') && b.Channel.includes(a.name)) a.calls = (a.calls || []).concat(Object.assign({}, { MobileNo: b.Accountcode}));

      })
    );
};

func(obj2, obj3);
console.log(JSON.stringify(obj2));

现在我也得到了想要的输出。

[
  {
    "name": "4134",
    "calls": [
      {
        "MobileNo": "7013658596"
      }
    ]
  }
]

感谢社区付出您的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多