Javascript 将对象数组转换为以分组键作为数组的对象的简单方法
我正在寻找一个简单的方法来做以下事情。我试着用lodash.reduce做这个,但它很笨重,有没有更简单的方法 发件人: 致:Javascript 将对象数组转换为以分组键作为数组的对象的简单方法,javascript,typescript,lodash,Javascript,Typescript,Lodash,我正在寻找一个简单的方法来做以下事情。我试着用lodash.reduce做这个,但它很笨重,有没有更简单的方法 发件人: 致: 我在typescript和lodash.reduce方面遇到了一些问题,这很有效 export function getFuncsObject(funcs): Record<Funcs, Case[]> { let f = { ...funcs }; f = lodash.mapValues(f, () => []); return f;
我在typescript和lodash.reduce方面遇到了一些问题,这很有效
export function getFuncsObject(funcs): Record<Funcs, Case[]> {
let f = { ...funcs };
f = lodash.mapValues(f, () => []);
return f;
}
export function mockMerge(funcs, mocks: Record<Funcs, Case | null>[]): Record<Funcs, Case[]> {
const f = getFuncsObject(funcs);
lodash.each(mocks, (v, k) => {
f[k].push(v);
});
return f;
}
您可以使用纯JS实现这一点,而不需要loadash 在输入数组上调用数组的reduce方法,并将数组缩减为一个对象,在内部对象的键上循环: const input=[{a:'meow'},{a:'woof'},{b:'hi'},{a:'dog',c:'bye'},{}]; console.loginput.reduceac,val=>{ Object.keysval.forEachkey=>{ 如果!acc[键]{ acc[键]=[]; } acc[key].pushval[key]; }; 返回acc;
}, {}; 一种选择是使用以下两种削减: 常量输入=[{ “喵喵” }, { a:‘汪’ }, { b:‘呜’ }]; 常量结果=输入 .reduceitemResult,项=>Object.keysitem .reducekeyResult,键=>{ …关键结果, [关键点]:关键结果[关键点]| |[]。具体项目[关键点] },itemResult,{}; console.logresult您可以使用它将所有属性及其各自的值分配到一个对象中,并使用一个自定义函数来确定您想要如何构造该对象
const result = _.assignWith({}, ...data, (v = [], s) => v.concat(s));
注意:为了确保不改变数据数组中的任何对象,我传递了一个空对象作为第一个参数作为目标对象
常数数据=[
{a:'喵'},
{a'woof',k'hey'},
{k:'哟',d:'呵呵'},
{d:'wazup',q:'ohoho'}
];
const result=.{},…数据赋值,v=[],s=>v.concats;
console.logresult;
不使用任何外部库或reduce const input=[{a:'meow'},{a:'woof'},{b:'hi'},{a:'dog',c:'bye'},{}]; 让输出={}; input.forEachinputObj=>{ 输入框中的forlet键{ if!输出[键]{ 输出[键]=[]; } 输出[键].PushInputBJ[键] } };
console.logoutput;我向输入集中添加了更多的对象,只是为了说明这在广义集上是有效的+1.如果不喜欢此更改,可以回滚。我很抱歉,在这种情况下,u.mergeWith也可以用于相同的情况。OP的情况不处理递归赋值,那么我只是选择使用lodashassignWithCare来分担工作?您代表的用户应该知道它的重要性
export function getFuncsObject(funcs): Record<Funcs, Case[]> {
let f = { ...funcs };
f = lodash.mapValues(f, () => []);
return f;
}
export function mockMerge(funcs, mocks: Record<Funcs, Case | null>[]): Record<Funcs, Case[]> {
const f = getFuncsObject(funcs);
lodash.each(mocks, (v, k) => {
f[k].push(v);
});
return f;
}
const result = _.assignWith({}, ...data, (v = [], s) => v.concat(s));