Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中进行映射搜索_Javascript_Arrays_Reactjs - Fatal编程技术网

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>