从单个数组创建嵌套数组的最快方法?

如何解决从单个数组创建嵌套数组的最快方法?

我在 .txt 文件中有大量数据。我正在使用 node.js fs.readFile 读取它,当我将数据作为 data.toString() 获取时,我得到如下内容:

II IY 9C JD 2D QC QY 6Y 3C ID
KI JI 2Y 6Y 5Y QY QI 3Y 7C 6D
TC 3Y 4I 7Y QC 2Y 3I 8C JI KH
AH 8H 5I 4C 9H JD 3H 7I JC AC

我需要创建一个嵌套数组,每行分成五个。它应该是这样的:

[
[[["I","I"] ["I","Y"] ["9","C"] ["J","D"] ["2","D"]],[["Q","C"] ["Q","Y"] ["6","Y"] ["3","C"] ["I","D"]]]
[[["K","I"] ["J","I"] ["2","Y"] ["5","Y"]],"Y"] ["Q","I"] ["3","Y"] ["7","C"] ["6","D"]]]
[[["T","C"] ["3","Y"] ["4","I"] ["7","C"]],[["2","I"] ["8","I"] ["K","H"]]]
[[["A","H"] ["8","H"] ["5","I"] ["4","C"] ["9","H"]],[["J","D"] ["3","H"] ["7","C"] ["A","C"]]]
]

这样做的最佳方法是什么?

编辑:

当前代码:

const fs = require('fs');
  fs.readFile(path,async (err,data) => {
    if (err) {
      return console.error(err);
    }
    console.log(data.toString());
  });

文件片段:

8C TS KC 9H 4S 7D 2S 5D 3S AC
5C AD 5D AC 9C 7C 5H 8D TD KS
3H 7H 6S KC JS QH TD JC 2D 8S
TH 8H 5C QS TC 9H 4D JC KS JS
7C 5H KC QH JD AS KH 4C AD 4S
5H KS 9C 7D 9H 8D 3S 5D 5C AH
6H 4H 5C 3H 2H 3S QH 5S 6S AS
TD 8C 4H 7C TC KC 4C 3H 7S KS
7C 9C 6D KD 3H 4C QS QC AC KH
JC 6S 5H 2H 2D KD 9D 7C AS JS
AD QH TH 9D 8H TS 6D 3S AS AC
2H 4S 5C 5S TC KC JD 6C TS 3C
QD AS 6H JS 2C 3D 9H KC 4H 8S
KD 8S 9S 7C 2S 3S 6D 6S 4H KC
3C 8C 2D 7D 4D 9S 4S QH 4H JD
8C KC 7S TC 2D TS 8H QD AC 5C
3D KH QD 6C 6S AD AS 8H 2H QS
6S 8D 4C 8S 6C QH TC 6D 7D 9D

解决方法

这将为您提供多组 2 组 5 个项目的预期输出

let data = `II IY 9C JD 2D QC QY 6Y 3C ID
KI JI 2Y 6Y 5Y QY QI 3Y 7C 6D
TC 3Y 4I 7Y QC 2Y 3I 8C JI KH
AH 8H 5I 4C 9H JD 3H 7I JC AC`;

let nested = data.split("\n").map(l => ([
  [...l.split(" ").filter((n,i) => i < 5).map(n => n.split(''))],[...l.split(" ").filter((n,i) => i >= 5).map(n => n.split(''))]
]))

console.log(nested)

// or even more concise

const gset = (grp,setn) => [...grp.split(" ").filter((n,i) => setn == 0 ? (i < 5) : (i>=5)).map(n => n.split(''))]
let nested2 = data.split("\n").map(g => ([gset(g,0),gset(g,1)]))
console.log('More concise version:',nested2)

,

您可以进行一些字符串操作,尤其是 split()

更新

答案似乎不能满足 OP 的问题。这是实际版本:

const data = 
`8C TS KC 9H 4S 7D 2S 5D 3S AC
5C AD 5D AC 9C 7C 5H 8D TD KS
3H 7H 6S KC JS QH TD JC 2D 8S
TH 8H 5C QS TC 9H 4D JC KS JS
7C 5H KC QH JD AS KH 4C AD 4S
5H KS 9C 7D 9H 8D 3S 5D 5C AH
6H 4H 5C 3H 2H 3S QH 5S 6S AS
TD 8C 4H 7C TC KC 4C 3H 7S KS
7C 9C 6D KD 3H 4C QS QC AC KH
JC 6S 5H 2H 2D KD 9D 7C AS JS
AD QH TH 9D 8H TS 6D 3S AS AC
2H 4S 5C 5S TC KC JD 6C TS 3C
QD AS 6H JS 2C 3D 9H KC 4H 8S
KD 8S 9S 7C 2S 3S 6D 6S 4H KC
3C 8C 2D 7D 4D 9S 4S QH 4H JD
8C KC 7S TC 2D TS 8H QD AC 5C
3D KH QD 6C 6S AD AS 8H 2H QS
6S 8D 4C 8S 6C QH TC 6D 7D 9D`;
const lines = data.split("\n"); // Each line will be an array value
let result = []; // Define our result
lines.forEach(item => {
  let current = [];
  let now = item.split(" ");
  let fir = [];
  let sec = [];
  for(let i = 0; i < now.length; i++) {
    if(i < 5) fir.push(now[i].split(""));
    else sec.push(now[i].split(""));
  }
  current.push(fir);
  current.push(sec);
  result.push(current);
});
console.log(result);

旧版本

const data = 
`8C TS KC 9H 4S 7D 2S 5D 3S AC
5C AD 5D AC 9C 7C 5H 8D TD KS
3H 7H 6S KC JS QH TD JC 2D 8S
TH 8H 5C QS TC 9H 4D JC KS JS
7C 5H KC QH JD AS KH 4C AD 4S
5H KS 9C 7D 9H 8D 3S 5D 5C AH
6H 4H 5C 3H 2H 3S QH 5S 6S AS
TD 8C 4H 7C TC KC 4C 3H 7S KS
7C 9C 6D KD 3H 4C QS QC AC KH
JC 6S 5H 2H 2D KD 9D 7C AS JS
AD QH TH 9D 8H TS 6D 3S AS AC
2H 4S 5C 5S TC KC JD 6C TS 3C
QD AS 6H JS 2C 3D 9H KC 4H 8S
KD 8S 9S 7C 2S 3S 6D 6S 4H KC
3C 8C 2D 7D 4D 9S 4S QH 4H JD
8C KC 7S TC 2D TS 8H QD AC 5C
3D KH QD 6C 6S AD AS 8H 2H QS
6S 8D 4C 8S 6C QH TC 6D 7D 9D`;
const lines = data.split("\n"); // Each line will be an array value
let result = []; // Define our result
lines.forEach(item => {
  let current = [];
  let now = item.split(" ");
  let fir = [];
  let sec = [];
  for(let i = 0; i < now.length; i++) {
    if(i < 5) fir.push(now[i].split(""));
    else sec.push(now[i].split(""));
  }
  current.push(fir);
  current.push(sec);
  result.push(current);
});
console.log(result);

,

split() 是您想要使用的。

let data = `II IY 9C JD 2D QC QY 6Y 3C ID
KI JI 2Y 6Y 5Y QY QI 3Y 7C 6D
TC 3Y 4I 7Y QC 2Y 3I 8C JI KH
AH 8H 5I 4C 9H JD 3H 7I JC AC`;

const createArray = (str) => {
    const splitedByLines = str.split('\n');
    const splitedByBlank = splitedByLines.map(line => line.split(' '));
    const result = splitedByBlank.map(line => line.map(e => e.split('')));
    return result;
}

console.log(createArray(data));

您甚至可以在一行中完成所有内容:

let data = `II IY 9C JD 2D QC QY 6Y 3C ID
KI JI 2Y 6Y 5Y QY QI 3Y 7C 6D
TC 3Y 4I 7Y QC 2Y 3I 8C JI KH
AH 8H 5I 4C 9H JD 3H 7I JC AC`;

const createArray2 = str => str.split('\n').map(line => line.split(' ')).map(line => line.map(e => e.split('')));

console.log(createArray2(data));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-