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

如何在JavaScript中按条件合并数组字段?(针对CLI字符串拆分数组的合并需求)

解决方案:处理CLI数组的合并与替换逻辑

我来分享一个能满足你所有需求的实现方案,逻辑清晰还能适配各种场景——不管CLI输出的顺序怎么变,也不管STRING3、STRING4是都存在、只存在一个还是都不存在,都能正确处理:

完整代码实现

var CLI = "STRING1 28 1.0\nSTRING2 26 0.5\nSTRING3 2 2.0\nSTRING4 5 1.0";
var CLIarr = CLI.toString().split("\n").map(line => line.split(" "));

// 初始化变量,专门存STRING3和STRING4的数据
let str3 = null;
let str4 = null;
let remainingItems = [];

// 遍历数组,把目标条目和其他条目分开处理
for (let item of CLIarr) {
    if (item[0] === 'STRING3') {
        str3 = { count: parseInt(item[1]), value: parseFloat(item[2]) };
    } else if (item[0] === 'STRING4') {
        str4 = { count: parseInt(item[1]), value: parseFloat(item[2]) };
    } else {
        remainingItems.push(item);
    }
}

// 根据不同情况处理合并或替换
let mergedInfo = '';
if (str3 && str4) {
    // 两者都存在,计算合并值并生成提示信息
    const totalCount = str3.count + str4.count;
    const avgValue = (str3.value + str4.value) / 2;
    mergedInfo = `Info: ${str3.count}+${str4.count}=${totalCount} and (${str3.value}+${str4.value})/2=${avgValue}`;
    // 添加合并后的条目到列表
    remainingItems.push(['MERGED', totalCount.toString(), avgValue.toString()]);
} else if (str3 || str4) {
    // 只存在其中一个,替换成STRING5(原条目已经被过滤掉,相当于移除原条目添加新的)
    const target = str3 || str4;
    remainingItems.push(['STRING5', target.count.toString(), target.value.toString()]);
}

// 按要求输出结果
if (mergedInfo) {
    console.log(mergedInfo);
}
// 输出所有保留的条目
for (let item of remainingItems) {
    console.log(item.join(' '));
}
// 最后输出固定的Info
console.log('Info');

关键逻辑说明

  • 数据分离:遍历数组时,把STRING3、STRING4单独提取出来,其他正常条目放到remainingItems里,这样后续处理不会干扰原有内容,也能轻松适配任意顺序的CLI输出。
  • 多分支处理:
    • 当STRING3和STRING4都存在时:计算总数量和平均值,生成要求的提示文本,然后把合并后的MERGED条目加入剩余列表。
    • 当仅存在其中一个时:直接将其替换为STRING5并加入列表(原条目已经被排除在remainingItems外,相当于完成了“移除原条目添加新条目”的要求)。
    • 当两者都不存在时:直接输出所有正常条目即可,无需额外操作。
  • 类型转换:把数字字符串转成数值类型计算,最后再转回字符串输出,保证计算的准确性。

测试场景验证

场景1:仅存在STRING3

var CLI = "STRING1 10 0.8\nSTRING3 3 1.5";

输出结果:

STRING1 10 0.8
STRING5 3 1.5
Info

场景2:两者都不存在

var CLI = "STRING1 5 2.0\nSTRING2 3 1.0";

输出结果:

STRING1 5 2.0
STRING2 3 1.0
Info

场景3:顺序打乱的情况

var CLI = "STRING4 5 1.0\nSTRING1 28 1.0\nSTRING3 2 2.0\nSTRING2 26 0.5";

输出结果和示例一致:

Info: 2+5=7 and (2.0+1.0)/2=1.5
STRING1 28 1.0
STRING2 26 0.5
MERGED 7 1.5
Info

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:34:11