You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中JSON数组拆分与拼接:按MaxVus匹配对应字段

JavaScript JSON转换处理:按规则提取并整理账户数据

我是JavaScript新手,需要处理以下场景:读取指定JSON字符串输入,将其拆分并拼接为包含AccountId、AccountName、MaxVus、DocCount四个数组的结构;若单个src_AccountId对应多个src_AccountName,需选取src_MaxVus值最高的条目对应的src_AccountName和src_DocCount。


示例1

输入

let json_input = "[
    {
        \"src_AccountId\":[\"00100027H3QAK\"],
        \"src_AccountName\":[\"Vis Card Services\",\"Vitoria Card Services SA\"],
        \"src_MaxVus\":[15,3],
        \"src_DocCount\":[15,3]
    },
    {
        \"src_AccountId\":[\"0010J000027lVFDQA2\",\"6516983c9d71be4bcd799313\"],
        \"src_AccountName\":[\"Semiconductor Components\",\"asdadasda\"],
        \"src_MaxVus\":[880,50],
        \"src_DocCount\":[19,10]
    }]";

预期输出

[
    {
        "AccountId": [
            "00100027H3QAK",
            "0010J000027lVFDQA2",
            "6516983c9d71be4bcd799313"
        ],
        "AccountName": [
            "Vis Card Services",
            "Semiconductor Components",
            "asdadasda"
        ],
        "DocCount": [
            "15",
            "19",
            "10"
        ],
        "MaxVus": [
            "15",
            "880",
            "50"
        ]
    }
]

示例2

输入

var json_input = "[
    {
        \"src_AccountId\":[\"00100027H3QAK\"],
        \"src_AccountName\":[\"Vis Card Services\",\"Vitoria Card Services SA\"],
        \"src_MaxVus\":[5,30],
        \"src_DocCount\":[2,50]
    },
    {
        \"src_AccountId\":[\"0010J000027lVFDQA2\",\"6516983c9d71be4bcd799313\"],
        \"src_AccountName\":[\"Semiconductor Components\",\"asdadasda\"],
        \"src_MaxVus\":[880,50],
        \"src_DocCount\":[19,10]
    }]";

预期输出

[{"AccountId":["00100027H3QAK","0010J000027lVFDQA2","6516983c9d71be4bcd799313"],"AccountName":["Vitoria Card Services SA","Semiconductor Components","asdadasda"],"DocCount":["50","19","10"],"MaxVus":["30","880","50"]}]

解决方案代码

function processJson(jsonStr) {
    // 解析JSON字符串为对象数组
    const data = JSON.parse(jsonStr);
    const result = {
        AccountId: [],
        AccountName: [],
        MaxVus: [],
        DocCount: []
    };

    data.forEach(item => {
        const accountIds = item.src_AccountId;
        const accountNames = item.src_AccountName;
        const maxVusList = item.src_MaxVus;
        const docCounts = item.src_DocCount;

        accountIds.forEach((accountId, idx) => {
            // 跳过已存在的AccountId,避免重复
            if (result.AccountId.includes(accountId)) return;

            // 确定要选取的条目索引:单个AccountId对应多条目时选MaxVus最高的
            let targetIndex = idx;
            if (accountIds.length === 1 && accountNames.length > 1) {
                targetIndex = maxVusList.indexOf(Math.max(...maxVusList));
            }

            // 填充结果数组,将数字转为字符串匹配示例格式
            result.AccountId.push(accountId);
            result.AccountName.push(accountNames[targetIndex]);
            result.MaxVus.push(String(maxVusList[targetIndex]));
            result.DocCount.push(String(docCounts[targetIndex]));
        });
    });

    // 包裹为数组格式返回
    return [result];
}

// 测试示例1
const input1 = `[
    {
        "src_AccountId":["00100027H3QAK"],
        "src_AccountName":["Vis Card Services","Vitoria Card Services SA"],
        "src_MaxVus":[15,3],
        "src_DocCount":[15,3]
    },
    {
        "src_AccountId":["0010J000027lVFDQA2","6516983c9d71be4bcd799313"],
        "src_AccountName":["Semiconductor Components","asdadasda"],
        "src_MaxVus":[880,50],
        "src_DocCount":[19,10]
    }]`;
console.log(JSON.stringify(processJson(input1), null, 2));

// 测试示例2
const input2 = `[
    {
        "src_AccountId":["00100027H3QAK"],
        "src_AccountName":["Vis Card Services","Vitoria Card Services SA"],
        "src_MaxVus":[5,30],
        "src_DocCount":[2,50]
    },
    {
        "src_AccountId":["0010J000027lVFDQA2","6516983c9d71be4bcd799313"],
        "src_AccountName":["Semiconductor Components","asdadasda"],
        "src_MaxVus":[880,50],
        "src_DocCount":[19,10]
    }]`;
console.log(JSON.stringify(processJson(input2)));

代码说明

  • 解析输入:使用JSON.parse()将JSON字符串转为JS对象数组,便于操作。
  • 初始化结果:创建包含四个目标数组的结果对象。
  • 遍历处理每个输入项:
    • 提取当前项的四个字段数组。
    • 遍历每个账户ID:跳过已存在的ID避免重复,判断是否需要选取MaxVus最高的条目,然后将对应值填充到结果数组。
  • 格式匹配:将数字类型的MaxVus和DocCount转为字符串,和示例输出格式一致。
  • 返回结果:将结果对象包裹为数组,符合预期输出结构。

内容的提问来源于stack exchange,提问作者Vikas J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:40:00