如何在JavaScript中从嵌套数组提取FS编码?
提取嵌套数组中以FS开头的编码
需求说明
从PDF转换得到的嵌套数组中,提取所有以FS开头的编码(如FS0003918245),生成仅包含唯一编码的新数组。
原始嵌套数组
let array = [ [ "1. FS0003918245\nBr. paketa: 1\nPovrat pošiljke - DS\nFS0003918245", null, "Primalac\nNaziv: Ljubica Čeman\nAdresa: Despota Stefana 2, 8 sprat Mesto: 21000 Novi Sad\nTelefon: 38163488007", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "Otkupnina:\nVrednost: Plaćanje: Cena:", null, null, null, null, null, null, null, null, "10.000,00\n0,00\nNalogodavac Virman 210,00", null, ], [ "Referenca: 1764801 ; MOZE KURIR DA OSTAVI PAKET U PRODAVNICU GAZDARICI SASKI", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ], [ "2. FS0003940457\nBr. paketa: 1\nPovrat pošiljke - DS\nFS0003940457", null, "Primalac\nNaziv: Marija STANKOVIC Adresa: Dedobarski put bb Mesto: 16220 Grdelica\nTelefon: 381637775928", null, null, null, null, null, null, null, null, null, null, null, null, null, "Otkupnina: Vrednost: Plaćanje: Cena:", null, null, null, null, null, null, null, null, null, null, null, null, null, null, "7.000,00\n0,00\nNalogodavac Virman 210,00", null, ], [ "Referenca: 1791153 ; Nazvati 1h prije isporuke", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ], [ "3. FS0003898043\nBr. paketa: 1\nPovrat pošiljke - DS\nFS0003898043", null, "Primalac\nNaziv: Dusan glisis Adresa: Olge Penavin 8 Mesto: 21000 Novi Sad Telefon: 381606369616", null, null, null, null, null, null, null, null, null, null, null, "Otkupnina: Vrednost: Plaćanje: Cena:", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "8.000,00\n0,00\nNalogodavac Virman 210,00", null, ] ];
解决方案代码
// 定义匹配FS编码的正则表达式 const fsCodeRegex = /FS\d+/g; // 处理数组:拍平嵌套结构 → 过滤非空字符串 → 提取所有匹配的编码 → 去重 → 转为数组 const fsCodes = [...new Set( array.flat() .filter(item => typeof item === 'string') .flatMap(item => item.match(fsCodeRegex) || []) )]; console.log(fsCodes); // 输出: ["FS0003918245", "FS0003940457", "FS0003898043"]
代码说明
- 数组拍平:使用
flat()将嵌套的二维数组转为一维数组,方便遍历所有元素 - 过滤有效元素:用
filter()筛选出类型为字符串的元素,排除null值 - 提取编码:通过
flatMap()结合正则的match()方法,从每个字符串中提取所有匹配的FS编码;如果没有匹配结果则返回空数组避免报错 - 去重处理:利用
Set的唯一性特性,去除重复出现的编码,最后通过扩展运算符...转回数组
内容的提问来源于stack exchange,提问作者aLEKSANDAR mILOSAVLJEVIC
相关产品推荐
相关产品推荐

