Подстрока в массиве объектов - PullRequest
1 голос
/ 28 октября 2019

Использование Node.js 10. *

Мне возвращается следующая структура данных:

const result = [
  {
    ID: 1,
    Reference: 'Id: 123, Name: "first'
  },
  {
    ID: 2,
    Reference: 'Name: "second'
  },
  {
    ID: 3,
    Reference: 'Id: 133, Name: "third'
  }
];

Я хочу захватить идентификатор каждой ссылки, если она существует, инажмите на новый массив, который даст мне следующее:

// [123,133]

Я могу использовать Filter и Map, чтобы отфильтровать, который не содержит 'Id' в Reference следующим образом:

let filter = result.filter(i => i.Reference.includes('Id:')).map(i => i.Reference)

Что дает мне:

// ['Id': 123, Name: 'first, 'Id': 133, Name: 'third'] 

Итак, из приведенного выше массива я должен был просто удалить Id, чтобы получить:

// [123,133]

Использование подстрок не похоже наработа для меня.

Ответы [ 3 ]

2 голосов
/ 28 октября 2019

Вы можете отобразить деталь с помощью регулярного выражения для цифр и вернуть число.

const
    result = [{ ID: 1, Reference: 'Id: 123, Name: "first' }, { ID: 2, Reference: 'Name: "second' }, { ID: 3, Reference: 'Id: 133, Name: "third' }],
    filter = result
        .filter(i => i.Reference.includes('Id:'))
        .map(i => i.Reference)
        .map(s => +s.match(/Id:\s*(\d+)/)[1])

console.log(filter);
2 голосов
/ 28 октября 2019

Используя регулярные выражения, вы можете убрать свой номер из строки

const Reference = 'Id: 133, Name: "third'

console.log(
  (/Id:\s(\d+),/g).exec(Reference)[1]
);

Окончательное решение:

const result = [
  {
    ID: 1,
    Reference: 'Id: 123, Name: "first'
  },
  {
    ID: 2,
    Reference: 'Name: "second'
  },
  {
    ID: 3,
    Reference: 'Id: 133, Name: "third'
  }
];

const res = result
  .map(({Reference})=>+((/Id:\s(\d+),/g).exec(Reference)||[])[1])
  .filter(item=>!!item)

console.log(res);
1 голос
/ 28 октября 2019

Вы можете использовать простую манипуляцию с массивом, если вы просто извлекаете часть текста после Id: (четыре символа, то есть до индекса 3 в строке) и первую запятую, которая появится после числа:

const result = [ { ID: 1, Reference: 'Id: 123, Name: "first' }, { ID: 2, Reference: 'Name: "second' }, { ID: 3, Reference: 'Id: 133, Name: "third' } ]; 

function extractId(reference) {
  let from = 3;
  let to = reference.indexOf(",");
  
  return reference.slice(from, to);
}

let ids = result
  .filter(i => i.Reference.includes('Id:'))
  .map(i => i.Reference)
  .map(extractId)
  .map(Number);
  

console.log(ids);

Кроме того, вы можете использовать регулярное выражение для захвата и извлечения идентификатора

const result = [ { ID: 1, Reference: 'Id: 123, Name: "first' }, { ID: 2, Reference: 'Name: "second' }, { ID: 3, Reference: 'Id: 133, Name: "third' } ]; 

function extractId(reference) {
  let regex = /Id: (\d+)/;
  
  return reference.match(regex)[1];
}

let ids = result
  .filter(i => i.Reference.includes('Id:'))
  .map(i => i.Reference)
  .map(extractId)
  .map(Number);
  

console.log(ids);
...