Проверьте, существует ли строка в другой строке, имеющей определенный образец в JavaScript - PullRequest
0 голосов
/ 25 сентября 2018

Вот мой код:

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. В моем коде я проверяю, существует ли это 4134 в значении ключа канала в obj3, используя if (b.Channel.includes(a.name)).Я использовал функцию include здесь.Таким образом, если 4134 существует в значении Channel в obj3, то Accountcode помещается в массив вызовов obj2, когда есть совпадение.Как видите, один из каналов - SIP/4134-0004462a, а другой - DAHDI-il-4134-sa.Оба они содержат 4134, но я хочу сравнить только те значения, в которых канал содержит текст SIP.Как видно из вышеприведенного вывода, код учетной записи из обоих объектов в obj3 помещается в массив вызовов в obj2, поскольку оба канала содержат 4134. Это не то, что я хочу.

Вот желаемый вывод, который я хочу:

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

В вышеуказанном выводе 4134 сопоставляется только с каналом, содержащим текст SIP в нем.Как мне это сделать с помощью функции include?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я решил эту проблему, используя еще одно условие в выражении 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"
      }
    ]
  }
]

Спасибо сообществу за уделенное время.

0 голосов
/ 25 сентября 2018

Изменить if (b.Channel.includes(a.name))... на if(b.Channel.includes(a.name) && b.Channel.match('SIP'))...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...