marlsun 2022-07-04 12:47 采纳率: 84.2%
浏览 86
已结题

根据属性名的特定字符过滤对象数组

有一对象数组arr,如下:

const arr = [
      {
        Chr: "chr",
        Num: 3,
        Kh: "h",

        Fn_A: "a",
        Fn_B: "b",
        Fn_C: "c",
        Fn_D: "d",

        Ini_A: "a",
        Ini_B: "b",
        Ini_C: "c",
        Ini_D: "d",

        Syl_A: "a",
        Syl_B: "b",
        Syl_C: "c",
        Syl_D: "d",
      },
    ];

想实现根据属性名所含特定字符('Fn', 'Ini','Syl'), 过滤出三个子数组(arrFn, arrIni, arrSyl), 'Chr, Num, Kh"则是每个子数组中都共有的,如:

const arrFn = [
     {
        Chr: "chr",
        Num: 3,
        Kh: "h",

        Fn_A: "a",
        Fn_B: "b",
        Fn_C: "c",
        Fn_D: "d"
   }
]

  • 写回答

5条回答 默认 最新

  • 林一怂儿 新星创作者: 前端开发技术领域 2022-07-04 13:25
    关注

    不知道你说的是不是这种效果。

    img

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <script>
            const arr = [
                {
                    Chr: "chr",
                    Num: 1,
                    Kh: "h",
                    Fn_A: "a",
                    Fn_B: "b",
                    Fn_C: "c",
                    Fn_D: "d",
                    Ini_A: "a",
                    Ini_B: "b",
                    Ini_C: "c",
                    Ini_D: "d",
                    Syl_A: "a",
                    Syl_B: "b",
                    Syl_C: "c",
                    Syl_D: "d",
                },
                {
                    Chr: "chr",
                    Num: 2,
                    Kh: "h",
                    Fn_A: "a",
                    Fn_B: "b",
                    Fn_C: "c",
                    Fn_D: "d",
                    Ini_A: "a",
                    Ini_B: "b",
                    Ini_C: "c",
                    Ini_D: "d",
                    Syl_A: "a",
                    Syl_B: "b",
                    Syl_C: "c",
                    Syl_D: "d",
                },
                {
                    Chr: "chr",
                    Num: 3,
                    Kh: "h",
                    Fn_A: "a",
                    Fn_B: "b",
                    Fn_C: "c",
                    Fn_D: "d",
                    Ini_A: "a",
                    Ini_B: "b",
                    Ini_C: "c",
                    Ini_D: "d",
                    Syl_A: "a",
                    Syl_B: "b",
                    Syl_C: "c",
                    Syl_D: "d",
                },
                {
                    Chr: "chr",
                    Num: 4,
                    Kh: "h",
                    Fn_A: "a",
                    Fn_B: "b",
                    Fn_C: "c",
                    Fn_D: "d",
                    Ini_A: "a",
                    Ini_B: "b",
                    Ini_C: "c",
                    Ini_D: "d",
                    Syl_A: "a",
                    Syl_B: "b",
                    Syl_C: "c",
                    Syl_D: "d",
                },
                {
                    Chr: "chr",
                    Num: 5,
                    Kh: "h",
                    Fn_A: "a",
                    Fn_B: "b",
                    Fn_C: "c",
                    Fn_D: "d",
                    Ini_A: "a",
                    Ini_B: "b",
                    Ini_C: "c",
                    Ini_D: "d",
                    Syl_A: "a",
                    Syl_B: "b",
                    Syl_C: "c",
                    Syl_D: "d",
                },
            ];
            let arrFn = [];
            let arrIni = [];
            let arrSyl = []
            let commonKeys = ['Chr', 'Num', 'Kh']
    
            function filterChildHasKeys(arr, commonKeys, containKey) {
                let res = [];
                for (const item of arr) {
                    let resItem = {};
                    for (const key in item) {
                        if (commonKeys.includes(key) || key.includes(containKey)) resItem[key] = item[key]
                    }
                    res.push(resItem)
                }
                return res
            }
    
            arrFn = filterChildHasKeys(arr, commonKeys, 'Fn')
            arrIni = filterChildHasKeys(arr, commonKeys, 'Ini')
            arrSyl = filterChildHasKeys(arr, commonKeys, 'Syl')
    
            console.log(arrFn);
            console.log(arrIni);
            console.log(arrSyl);
    
        </script>
    </body>
    
    </html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月4日
  • 已采纳回答 7月4日
  • 修改了问题 7月4日
  • 创建了问题 7月4日