从字符串数组中剪切第一个单词并存储在新变量中

Cut the first word out of an array of strings and store in a new variable

提问人:goatstash 提问时间:3/27/2022 更新时间:3/27/2022 访问量:56

问:

我目前正在取回一个这样的数组:

['Alica Brereton,Marijuana,9.18,50',
  'William Kotai,ecstasy,19.12,20',
  'Joel Forro,heroin,91.16,5',
  'David Ernest,Methamphetamine,108.78,5',
  'David Ernest,cocaine,80,2',
  'Joel Forro,ecstasy,19.12,10',
  'Gabriella Hyde,Marijuana,9.18,10',
  'Gabriella Hyde,Methamphetamine,108.78,8',
  'Marijuana,9.18,10'
]

我想剪切每个字符串开头的名称并存储在一个新变量中,所以我会有这样的东西:

['Alica Brereton',
  'William Kotai',
  'Joel Forro',
  'David Ernest',
  'Joel Forro',
  'Gabriella Hyde'
]

我正在处理一个文本文件,这是我当前的

code: 
const fs = require("fs");
const data = fs.readFileSync("data.txt").toString();
const lines = data.split("\n");

let customerKeys = lines[0].replace("customer", "Total Price");
lines.shift();
console.log(customerKeys);
console.log(lines);

let array = lines.filter((str) => {
  return str !== "";
});
let arrNoSpaces = array;

console.log(arrNoSpaces);
arrNoSpaces[6].replace("Gabriella Hyde,", "");
var GabriellaExtra = arrNoSpaces[6].replace("Gabriella Hyde,", "");
console.log(GabriellaExtra);

arrNoSpaces.push(GabriellaExtra);
console.log(arrNoSpaces);
arrNoSpaces.splice(-3, 1);

console.log(arrNoSpaces);
JavaScript 数组 数据操作 array.prototype.map

评论

0赞 Nolan B. 3/27/2022
您可以使用 ,但前提是逗号分隔字符串中的第一个条目始终是名称,而您的示例中并非如此。在回答这个问题之前,我们需要更多的信息——我们需要更多关于这些字符串的信息。.map(str => str.split(',')[0])
0赞 Nick Parsons 3/27/2022
为什么在您的预期输出中两次而不是?'Joel Forro''David Ernest'
0赞 goatstash 3/27/2022
事情就是这样presented.@NickParsons。理想情况下,如果我能把每个名字都删掉,我就可以处理重复的名字。在完成的数组中,我不需要重复的名称,但如果我这样做,我会管理。

答:

1赞 CertainPerformance 3/27/2022 #1

正则表达式可以匹配每个字符串中的字母和空格(而不是逗号),映射到新数组。

const arr = ['Alica Brereton,Marijuana,9.18,50',
  'William Kotai,ecstasy,19.12,20',
  'Joel Forro,heroin,91.16,5',
  'David Ernest,Methamphetamine,108.78,5',
  'David Ernest,cocaine,80,2',
  'Joel Forro,ecstasy,19.12,10',
  'Gabriella Hyde,Marijuana,9.18,10',
  'Gabriella Hyde,Methamphetamine,108.78,8',
  'Marijuana,9.18,10'
];

const result = arr
  .map(line => line.match(/\w+ \w+/)?.[0]) // extract matches
  .filter((item, i, arr) => item && arr[i - 1] !== item) // filter out failed matches and dupes
console.log(result);

评论

0赞 goatstash 3/27/2022
这非常有效。我想知道您是否可以解释 .filter 行?
0赞 CertainPerformance 3/27/2022
\w+ \w+将字符串与单词匹配,后跟一个空格,后跟更多单词。 提取匹配项(如果存在),否则计算结果为 。未定义的元素需要被过滤掉,因此 ,您还需要检查前一个元素是否等于当前元素以过滤掉重复项,这是可以做到的。?.[0]undefineditem &&arr[i - 1] !== item
0赞 goatstash 3/27/2022
我可以使用类似的方法来做相反的事情并获取所有不是名称的信息吗?
0赞 CertainPerformance 3/27/2022
之后,您可以在另一个捕获组中匹配所有内容并提取该匹配项,和/或将整个匹配项与另一个捕获组交替进行匹配(以选择甚至不以名称开头的行,例如Marijuana,9.18,10)