javascript - 在某个字符后将数组中的每个元素拆分为对象
问题描述
我是 node.js 和 javascript 的新手。我有以下数组:
var oldarray = [
'name1\tstreet\tperson\tphone1\tphone2\nname2\street2\tperson1\tphone82\tphone3\n'
]
请注意,这是一个单元素数组。首先,我要求数组首先在每个新行之后包含一个新元素,然后重新格式化,如下所示:
let headers = {
name: "",
street: "",
person: "",
phone 1 "",
phone 2 ""
}
如何解析每个元素(在每个 + 之后创建一个新元素之后),并在每个实例之后在数组中分配一个对象\
所需的输出是这样的:
[{
name: 'name1',
street: 'street2',
person: 'person1',
phone1: 'phone82 ',
phone2: 'phone3'
},
{
name: 'name2',
street: 'street2',
person: 'person1',
phone1: 'phone1 ',
phone2: 'phone2'
}]
非常感谢任何帮助。
解决方案
如果您的所有项目都具有相同的结构,OLD_ARRAY
则可以使用map
,filter
并reduce
操作您的输入。
那我做了什么?
- 如果您有多个字符串,例如示例输入(超过 1 个数组项),我使用
map
和split
by将其转换为每个字符串的子数组\n
,这是您的字符串分隔符。比我用不为空的字符串过滤它(因为你也有一个后缀\n
)。 - 从每个子数组中,我使用
extractContacts
函数提取了所有联系人 - 它通过您的 separaotr 拆分子数组\t
,并根据您的联系人模板对其进行映射。 - 由于它是数组数组的格式,我使用 reduce 将所有数组连接在一起
const OLD_ARRAY = [
'name1\tstreet\tperson\tphone1\tphone2\n' +
'name2\tstreet2\tperson1\tphone82\tphone3\n'
];
function extractContacts(templates) {
return templates.map(t => t.split('\t'))
.map(details => ({
name: details[0],
street: details[1],
person: details[2],
phone1: details[3],
phone2: details[4]
}));
}
let contacts = OLD_ARRAY.map(str => str.split('\n').filter(str => str !== ''))
.map(template => extractContacts(template))
.reduce((a, acc) => acc.concat(a), []);
console.log(contacts)
推荐阅读
- javascript - 如果存在小数,则使用正则表达式的第一部分进行匹配,如果不存在则使用第二部分
- azure - Appinsight 自定义指标的 azurerm_monitor_metric_alert 不起作用
- swift - 具有通用属性的结构符合 Swift 中的 Encodable
- java - 如果不建议输入选项,则清除 AutoCompleteTextView
- c# - 如何检查字符串是否包含c#中的特定字符串
- html - html 和每个元素通常使用什么字体大小?
- python - 如何使用 Python 拆分数据库中的一系列字符串,然后旋转显示单词和出现次数的结果
- python - 使用 xarray 时的段错误,仅在“导入火炬”时
- angular - 在浏览器中调试 TS 文件
- javascript - 将嵌套对象转换为对象的 Json Array