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

JavaScript中如何将数组对象转换为指定的多对象目标数组?

问题:合并筛选条件数组的正确方式

原始输入数组:

[
 {subjects: "Literature"},
 {subjects: "Science"},
 {ageLevels: "Preschool"}
]

目标输出数组:

[
 {subjects: "Literature", ageLevels: "Preschool"},
 {subjects: "Science"}
]

当前使用的代码无法保留所有subjects项,最终仅得到{subjects: 'Literature', ageLevels: 'Preschool'},需要修改代码以生成符合要求的数组。

当前代码:

let selectedFilters = [];
let selectedSubjects = ["Science", "Literature"];
let selectedAge = ["Preschool"];
let finalObj = {};

if (selectedSubjects.length > 0) {  
    selectedSubjects.forEach((element) => {
        let subj = {};
        subj.subjects = element;
        selectedFilters.push(subj);
    });
}

if (selectedAge.length > 0) {
    selectedAge.forEach((element) => {
        let age = {};
        age.ageLevels = element;
        selectedFilters.push(age);
    });
}
for (let i = 0; i < selectedFilters.length; i++) {
    Object.assign(finalObj, selectedFilters[i]);
}

解决方案

直接基于选中的科目和年龄处理

如果已经有selectedSubjects和selectedAge这两个数组,直接遍历科目数组,给第一个科目附加年龄属性即可:

let selectedSubjects = ["Science", "Literature"];
let selectedAge = ["Preschool"];
let finalFilters = [];

selectedSubjects.forEach((subject, index) => {
    const filterItem = { subjects: subject };
    // 仅给第一个科目添加年龄级别(如果有选中的年龄)
    if (index === 0 && selectedAge.length > 0) {
        filterItem.ageLevels = selectedAge[0];
    }
    finalFilters.push(filterItem);
});

console.log(finalFilters);

基于原始拆分数组处理

如果是从原始的拆分数组(即开头的输入数组)出发,先提取出所有科目和年龄,再按规则组合:

const inputArr = [
 {subjects: "Literature"},
 {subjects: "Science"},
 {ageLevels: "Preschool"}
];

// 提取所有科目和年龄项
const subjectsList = inputArr.filter(item => item.subjects).map(item => item.subjects);
const ageList = inputArr.filter(item => item.ageLevels).map(item => item.ageLevels);

const finalFilters = subjectsList.map((subject, index) => {
    const resultItem = { subjects: subject };
    // 第一个科目附加年龄(如果存在年龄数据)
    if (index === 0 && ageList.length > 0) {
        resultItem.ageLevels = ageList[0];
    }
    return resultItem;
});

console.log(finalFilters);

代码说明

  • 核心逻辑是为每个科目创建独立对象,仅给第一个科目添加年龄属性,避免了原代码中把所有对象合并成单个对象导致的覆盖问题
  • 这样处理后,所有科目都会被保留,同时第一个科目带上年龄筛选条件,完全匹配目标输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:58:18