Javascript 在数组中进行映射搜索
嘿,数据库里有这个表Javascript 在数组中进行映射搜索,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,嘿,数据库里有这个表 st_ID firstName LastName Classes 1 paul adams php 1 paul adams javascript 1 paul adams ASP 2 Georges wayne PHP 所以我想得到这个结果: <table> <thead&g
st_ID firstName LastName Classes
1 paul adams php
1 paul adams javascript
1 paul adams ASP
2 Georges wayne PHP
所以我想得到这个结果:
<table>
<thead>
<tr>
<td>FirstName</td>
<td>LastName</td>
<td>Classes</td>
</tr>
</thead>
<tbody>
<tr>
<td>paul</td>
<td>adams</td>
<td>php, javascript,Asp</td>
</tr>
</tbody>
<table>
任何帮助都将不胜感激。您需要以某种方式将对象分组如下
var helper = {};
var result = arr.reduce(function(r, o) {
var key = o.FirstName + '-' + o.LastName;
if(!helper[key]) {
helper[key] = Object.assign({}, o); // create a copy of o
r.push(helper[key]);
} else {
helper[key].ClassName +=","+ o.ClassName;
}
return r;
}, []);
我们正在连续检查现有的关键点,并将它们推送到帮助对象中。其中,classname由逗号分隔
检查此示例请尝试此解决方案,希望对您有所帮助
让testValue=[
{
圣卢西亚:1,
名字:“保罗”,
姓:“亚当斯”,
类:“php”
},
{
圣卢西亚:1,
名字:“保罗”,
姓:“亚当斯”,
类:“JS”
},
{
圣卢西亚:1,
名字:“保罗”,
姓:“亚当斯”,
类:“ASP”
},
{
圣卢西亚:2,
名字:“乔治”,
姓:“韦恩”,
类:“php”
}
]
让数据=[];
from(新集合(testValue.map(obj=>obj.st_ID))).forEach(ID=>{
设isFirstTime:boolean=true;
testValue.filter((el)=>{
返回(el.st_ID==ID)
}).forEach(obj=>{
//先检查!
如果(是第一次){
数据推送(obj);
isFirstTime=false;
}否则{
数据[data.length-1]。类+=','+obj.Classes;
}
});
});
控制台日志(数据)代码>由于数据的组织方式,我建议首先对其进行迭代,以获得更好的映射结构
在本例中,我假设从数据库中提取数据后,数据如下所示
const databaseData = [
{
st_ID: 1,
firstName: 'paul',
lastName: 'adams',
classes: 'php'
}, {
st_ID: 1,
firstName: 'paul',
lastName: 'adams',
classes: 'JS'
}
]
第一次迭代:将每个技能分配给个人。实现这一点的一种方法是使用数组函数
const combineClasses = data.reduce((collect, {st_ID, firstName, lastName, classes}) => {
if (collect[st_ID]) {
classes = [...collect[st_ID].classes, classes]
return {...collect, [st_ID]: {...collect[st_ID], classes}}
} else {
return {...collect, [st_ID]: {firstName, lastName, classes: [classes]}}
}
}, {});
代码在做什么
迭代数据中的每个项
如果存在个体,则将类中的值添加到对象中的数组中
如果没有,则添加id作为对象中的键,并添加firstname、lastname和类(在数组中)
第二次迭代:现在你已经组织好了你的数据,并且每个人都列出了你的技能,这将更容易绘制地图。比如说
<tbody>
{ Object.keys(combineClasses).map((key) => {
return (
<tr>
<td>{combineClasses[key].firstName}</td>
<td>{combineClasses[key].lastName}</td>
<td>{combineClasses[key].classes.join(', ')}</td>
</tr>
);
})}
</tbody>
{Object.keys(combineClasses).map((key)=>{
返回(
{combineClasses[key].firstName}
{combineClasses[key].lastName}
{combineClasses[key].classes.join(',')}
);
})}
显然,您需要代码来显示完整的表和包含标题。您将在下面找到一个工作示例。
testValue外观的价值是什么like@eddyReact中没有map函数,正如您所提到的,React是javascript,map是应用于数组的方法。我不是在帮忙,只是想澄清一下!干杯
<tbody>
{ Object.keys(combineClasses).map((key) => {
return (
<tr>
<td>{combineClasses[key].firstName}</td>
<td>{combineClasses[key].lastName}</td>
<td>{combineClasses[key].classes.join(', ')}</td>
</tr>
);
})}
</tbody>