Javascript ES6将所有名称过滤到一个函数中

Javascript ES6将所有名称过滤到一个函数中,javascript,arrays,ecmascript-6,refactoring,Javascript,Arrays,Ecmascript 6,Refactoring,我试图过滤一个对象数组,并根据匹配与否分配多个变量 这样做的原因是,我可以在字符串文本中使用变量,显示值 我已经设法打破它,但我看到我重复了很多,我相信这不是最有效的方式 任何帮助都将不胜感激 let stats=[{name:“goals”,value:5}, {名称:“损失”,价值:20}, {名称:“wins”,值:48}, {name:“draws”,值:23}, {name:“fwd_pass”,值:1533}, {名称:“目标协助”,值:2}, {名称:“外观”,值:80}, {名

我试图过滤一个对象数组,并根据匹配与否分配多个变量

这样做的原因是,我可以在字符串文本中使用变量,显示值

我已经设法打破它,但我看到我重复了很多,我相信这不是最有效的方式

任何帮助都将不胜感激

let stats=[{name:“goals”,value:5},
{名称:“损失”,价值:20},
{名称:“wins”,值:48},
{name:“draws”,值:23},
{name:“fwd_pass”,值:1533},
{名称:“目标协助”,值:2},
{名称:“外观”,值:80},
{名称:“mins_played”,值:6953},
{名称:“向后传递”,值:308}]
//const{player,stats}=playerData[0]
常量外观=stats.filter({name},i)=>{
返回名称==“外观”
});
const goals=stats.filter({name},i)=>{
返回名称==“目标”
});
const assists=stats.filter({name},i)=>{
返回名称==“目标\协助”
});
const mins=stats.filter({name},i)=>{
返回名称==“播放分钟数”
});
const fwdPass=stats.filter({name},i)=>{
返回名称==“fwd_通行证”
});
const backPass=stats.filter({name},i)=>{
返回名称==“向后传递”

});如果使用对象并将名称指定为属性,则代码会短得多。如果您希望对变量或属性进行camel大小写,则它将始终较长。除非使用正则表达式或字符串操作将名称值动态转换为大小写。但这是不必要的延伸

let stats=[{name:“goals”,value:5},
{名称:“损失”,价值:20},
{名称:“wins”,值:48},
{name:“draws”,值:23},
{name:“fwd_pass”,值:1533},
{名称:“目标协助”,值:2},
{名称:“外观”,值:80},
{名称:“mins_played”,值:6953},
{名称:“向后传递”,值:308}]
//const{player,stats}=playerData[0]
const statsObj={};
stats.forEach((item)=>{statsObj[item.name]=item;});
console.log(statsObj.wins)//输出{name:“wins”,值:48}

log(statsObj.wins.value)//48
您的方法返回每个变量的数组。另一种方法是创建一个以键为名称的对象。这样,您就可以使用该名称访问并获取特定对象

let stats=[{name:“进球”,value:5},{name:“失利”,value:20},{name:“获胜”,value:48},{name:“平局”,value:23},{name:“向前传球”,value:1533},{name:“进球助攻”,value:2},{name:“出场”,value:80},{name:“上场时间”,value:6953},{name:“向后传球”,value:308},
variables=stats.reduce((a,c)=>Object.assign(a,{[c.name]:c}),Object.create(null));

log(`Access through key:${variables.fwd_pass.value}`)您可以创建一个函数,将名称传递给该函数以过滤数据:

let stats=[{name:“进球”,value:5},{name:“失利”,value:20},{name:“获胜”,value:48},{name:“平局”,value:23},{name:“前进传球”,value:1533},{name:“进球助攻”,value:2},{name:“出场”,value:80},{name:“上场时间”,value:6953},{name:“后退传球”,value:308}]
const fnFilter=(name)=>stats.find(x=>x.name==name)
console.log(fnFilter(“外观”))

log(fnFilter('backward_pass'))
似乎使用对象而不是数组可以简化这一切