用js 写一方法,将a的数据处理为a1?

id相同,ass里的数据根据 id相同,unicode 相同 ,把pearPlanFlag有属性的值加到第一个id出现的情况

const a = [
    {
      id: 3889,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 , pearPlanFlag: true},
        { unicode: 222, uniname: "山西", budgetMoney: 600 , pearPlanFlag: false},
        { unicode: 333, uniname: "江西", budgetMoney: 200 , },
      ],
    },
    {
      id: 3889,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 , pearPlanFlag: true},
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 , pearPlanFlag: true},
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 },
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 , pearPlanFlag: false},
        { unicode: 333, uniname: "江西", budgetMoney: 200 },
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 , pearPlanFlag: true},
      ],
    }
];
const a1 = [
    {
      id: 3889,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 , pearPlanFlag: true},
        { unicode: 222, uniname: "山西", budgetMoney: 600 , pearPlanFlag: false},
        { unicode: 333, uniname: "江西", budgetMoney: 200 , pearPlanFlag: true },
      ],
    },
    {
      id: 3889,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 },
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 , pearPlanFlag: true},
        { unicode: 222, uniname: "山西", budgetMoney: 600 , pearPlanFlag: false},
        { unicode: 333, uniname: "江西", budgetMoney: 200 , pearPlanFlag: true},
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 },
      ],
    },
    {
      id: 4000,
      ass: [
        { unicode: 111, uniname: "上海", budgetMoney: 200 },
        { unicode: 222, uniname: "山西", budgetMoney: 600 },
        { unicode: 333, uniname: "江西", budgetMoney: 200 },
      ],
    }
];
阅读 1.9k
3 个回答
function processArray(a) {
    return a.map(item => {
        const hasTrueFlag = item.ass.some(assItem => assItem.pearPlanFlag === true);
        item.ass = item.ass.map(assItem => {
            assItem.pearPlanFlag = hasTrueFlag;
            return assItem;
        });
        return item;
    });
}

const a1 = processArray(a);
function transform(arr) {
    const ret = [], cache = {};
    for (let i = 0; i < arr.length; ++i) {
        const { id, ass } = arr[i];
        const _ass = (cache[id] ??= {});
        ret[i] = { ...arr[i], ass: [] };
        for (let j = 0; j < ass.length; ++j) {
            const item = ret[i].ass[j] = { ...ass[j] };
            const { unicode, pearPlanFlag } = item;
            const _item = _ass[unicode];
            if (!_item) {
                _ass[unicode] = item;
            } else if (pearPlanFlag != null) {
                if (_item.pearPlanFlag == null) {
                    _item.pearPlanFlag = pearPlanFlag;
                }
                delete item.pearPlanFlag;
            }
        }
    }
    return ret;
}
console.log(transform(a));
Object.values(a.reduce((obj, {id, ass}) => {
    let arr = obj[id] ??= {'': []};
    arr[''].push({id, ass: ass.map(({pearPlanFlag: v, ...rest}) => {
        (arr[rest.unicode] ??= rest).pearPlanFlag ??= v;
        return rest;
    })});
    return obj;
}, {})).flatMap(i => i['']);
推荐问题