如何优化以下JavaScript函数

如何优化以下JavaScript函数,javascript,optimization,Javascript,Optimization,我正在尝试优化我的代码,或者看看是否有更好的方法。给定下面acctData和余额的值,我需要返回一个按用户名过滤的帐户数组我的代码有效 const acctData=[{ 附件:“AAA-1234”, 用户:“爱丽丝” }, { 附件:“AAA-5231”, 用户:“鲍勃” }, { 附件:“AAA-9921”, 用户:“爱丽丝” }, { 附件:“AAA-8191”, 用户:“爱丽丝” } ]; 常量余额={ “AAA-1234”:4593.22, “AAA-9921”:0, “AAA-52

我正在尝试优化我的代码,或者看看是否有更好的方法。给定下面acctData和余额的值,我需要返回一个按用户名过滤的帐户数组我的代码有效

const acctData=[{
附件:“AAA-1234”,
用户:“爱丽丝”
},
{
附件:“AAA-5231”,
用户:“鲍勃”
},
{
附件:“AAA-9921”,
用户:“爱丽丝”
},
{
附件:“AAA-8191”,
用户:“爱丽丝”
}
];
常量余额={
“AAA-1234”:4593.22,
“AAA-9921”:0,
“AAA-5231”:232142.5,
“AAA-8191”:4344
};
const combinedAccBalance=JSON.parse(JSON.stringify(acctData));
常量GetAccountNumber=(filterByUser)=>{
返回组合式余额
.过滤器(acc=>{
会计科目余额=余额[会计科目];
返回acc.user==filterByUser;
})
.排序((a,b)=>{
返回a.余额-b.余额;
})
.map(fa=>{
返回fa.acctNum;
});
};
日志(getAccountNumber(“Alice”);

//返回[“AAA-9921”、“AAA-8191”、“AAA-1234”]
您只需跳过深度克隆部分,然后执行如下操作:

const acctData=[{
附件:“AAA-1234”,
用户:“爱丽丝”
},
{
附件:“AAA-5231”,
用户:“鲍勃”
},
{
附件:“AAA-9921”,
用户:“爱丽丝”
},
{
附件:“AAA-8191”,
用户:“爱丽丝”
}
];
常量余额={
“AAA-1234”:4593.22,
“AAA-9921”:0,
“AAA-5231”:232142.5,
“AAA-8191”:4344
};
让GetAccountNumber=(filterByUser)=>{
返回acctData
.filter(acc=>acc.user===filterByUser)
.排序((a,b)=>{
返回余额[a.acctNum]-余额[b.acctNum];
})
.map(fa=>{
返回fa.acctNum;
});
};
日志(getAccountNumber(“Alice”);

//返回[“AAA-9921”、“AAA-8191”、“AAA-1234”]
您只需跳过深度克隆部分,然后执行如下操作:

const acctData=[{
附件:“AAA-1234”,
用户:“爱丽丝”
},
{
附件:“AAA-5231”,
用户:“鲍勃”
},
{
附件:“AAA-9921”,
用户:“爱丽丝”
},
{
附件:“AAA-8191”,
用户:“爱丽丝”
}
];
常量余额={
“AAA-1234”:4593.22,
“AAA-9921”:0,
“AAA-5231”:232142.5,
“AAA-8191”:4344
};
让GetAccountNumber=(filterByUser)=>{
返回acctData
.filter(acc=>acc.user===filterByUser)
.排序((a,b)=>{
返回余额[a.acctNum]-余额[b.acctNum];
})
.map(fa=>{
返回fa.acctNum;
});
};
日志(getAccountNumber(“Alice”);

//返回[“AAA-9921”、“AAA-8191”、“AAA-1234”]
请考虑将此发布到上,因为它可以正常工作,并且您要求改进。这在我看来非常合理。但是我认为您不需要
const combinedAccBalance=JSON.parse(JSON.stringify(acctData))的深度复制操作
因为在
getAccountNumbers()
中没有更改数组中的任何内容。
.filter()
方法将提供一个浅数组副本,然后对其进行排序。所以,对原始数组没有任何更改。嗨@cars100m我正在添加一个新的属性acc.balance=balance[acc.acctNum];我过滤的地方,所以它确实改变了原始数组。想法?考虑这件事,因为它工作,你要求改进。这看起来完全合理的我。但是我认为您不需要
const combinedAccBalance=JSON.parse(JSON.stringify(acctData))的深度复制操作
因为在
getAccountNumbers()
中没有更改数组中的任何内容。
.filter()
方法将提供一个浅数组副本,然后对其进行排序。所以,对原始数组没有任何更改。嗨@cars100m我正在添加一个新的属性acc.balance=balance[acc.acctNum];我过滤的地方,所以它确实改变了原始数组。想法?啊,啊,太好了!谢谢我喜欢这样,我不必用这个解决方案复制数组是的,基本上你可以避免整个复制过程,得到相同的结果移动{}和return语句(比如filter),然后在映射后进行排序,这会使它更短!谢谢我喜欢这样,我不必用这个解决方案来复制数组是的,基本上你可以避免整个复制过程,得到相同的结果移动{}和return语句(比如filter),在映射后进行排序将使它更短