Menggunakan Node.js 10.*

Saya memiliki struktur data berikut yang dikembalikan kepada saya:

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

Saya ingin menangkap Id dari setiap Referensi jika ada, dan Push ke array baru, yang akan memberi saya yang berikut:

// [123,133]

Saya dapat menggunakan Filter dan Peta untuk memfilter yang tidak mengandung 'Id' di Referensi dengan yang berikut:

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

Yang memberi saya:

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

Jadi dari array di atas, saya hanya menghapus Id untuk mendapatkan:

// [123,133]

Menggunakan sub string sepertinya tidak berhasil untuk saya.

1
Jim Dover 28 Oktober 2019, 18:55

3 jawaban

Jawaban Terbaik

Anda bisa memetakan bagian dengan ekspresi reguler untuk angka dan mengembalikan angka.

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
Nina Scholz 28 Oktober 2019, 16:00

Anda dapat menggunakan manipulasi array sederhana jika Anda hanya mengekstrak bagian teks dari setelah Id: (empat karakter, hingga indeks 3 dalam string) dan koma pertama yang akan muncul setelah nomor:

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);

Atau, Anda dapat menggunakan ekspresi reguler untuk menangkap dan mengekstrak ID

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);
1
VLAZ 28 Oktober 2019, 16:07

Menggunakan regex Anda dapat menghapus nomor Anda dari string Anda

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

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

Solusi akhir:

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);
2
kemicofa ghost 28 Oktober 2019, 15:59