我有一个动态创建的数组,如下所示:
["171281-0-001-1", "171281-0-001-2"]
基本上,我是基于一个非常复杂的函数来创建值。但是这里的功能并不重要。基本上,例如171281-0-001-1
由帐号+ id组成。 171281-0-001
是帐号,1
是ID。
破折号可以是任意数字,但最后一个破折号之后始终是id。
如何将这些与我的值区分开来并将其分配给不同的变量?
尝试:
for (let key in this.your_reference) {
extractedAccountNumber = key.split('-')[0];
extractedId = key.split('-')[1];
}
但是由于破折号现在可以是任意数字,因此变量的值有误。有想法吗?预先感谢
答案 0 :(得分:3)
您可以使用map()
和split()
从最后一个数组 index 中获取项目:
var arr = ["171281-0-001-1", "171281-0-001-2"];
var idList = arr.map(d => {
d = d.split('-');
return d[d.length - 1];
});
console.log(idList);
答案 1 :(得分:0)
您可以使用包含两组的正则表达式:一个捕获的组,它匹配任何内容,然后匹配一个破折号,然后是另一个捕获的组,用于数字,后跟字符串的结尾:
["171281-0-001-1", "171281-0-001-2"].forEach((str) => {
// first item in the array is the entire match,
// but you only care about the two capture groups, so ignore the first item:
const [,accountNumber, id] = str.match(/(.+)-(\d+)$/);
console.log(accountNumber);
console.log(id);
});
答案 2 :(得分:0)
您可以为此使用lastIndexOf
和substring
var arr = ["171281-0-001-1", "171281-0-001-2"];
var ids = arr.map(d => d.substring(d.lastIndexOf('-') + 1));
console.log(ids);
答案 3 :(得分:0)
const arr = ["171281-0-001-1", "171281-0-001-2"];
const accountDetails = arr.map((item) => {
const itemArr = item.split('-');
const accountNumber = itemArr.slice(0, itemArr.length -1).join('-');
const id = itemArr[itemArr.length - 1];
return {id, accountNumber};
});
console.log(accountDetails);