js和ts里连个字符串插入方法都没有,难受!
这个参考了python中index可以是负数从后向前数的思想,自己写了一个。
/**
* 字符串插入函数 \
* 自己确认插入位置,若位置不对会抛出异常。
* @param {string} src 原字符串
* @param {number} pos 插入的位置,可正着数,可倒着数,正数第一个元素为0,倒着数第一个元素为-1
* @param {string} val 插入的值
*/
function insertStr(src:string, pos:number, val:string):string;
console.clear();
/**
* 字符串插入函数 \
* 自己确认插入位置,若位置不对会抛出异常。
* @param {string} src 原字符串
* @param {number} pos 插入的位置,可正着数,可倒着数,正数第一个元素为0,倒着数第一个元素为-1
* @param {string} val 插入的值
*/
function insertStr(src:string, pos:number, val:string):string{
if(pos < -src.length-1 || pos > src.length) throw "insert position is error";
if(pos >= 0)
return src.slice(0, pos) + val + src.slice(pos);
else
return src.slice(0, src.length + 1 + pos) + val + src.slice(src.length + 1 + pos);
}
// 以下为测试用例
let str = "0123456789";
console.log(str.length);
for(let i = -13; i<=str.length+1; i++){
try{
console.log(i, insertStr(str, i, "###"));
}catch(e){
console.log(i, e);
}
}
// 以下为测试用例
str = "";
console.log(str.length);
for(let i = -2; i<=str.length+1; i++){
try{
console.log(i, insertStr(str, i, "###"));
}catch(e){
console.log(i, e);
}
}
到以下网址测试代码:
TypeScript: TS Playground - An online editor for exploring TypeScript and JavaScript
JavaScript代码如下:
"use strict";
console.clear();
/**
* 字符串插入函数 \
* 自己确认插入位置,若位置不对会抛出异常。
* @param src 原字符串
* @param pos 插入的位置,可正着数,可倒着数,正数第一个元素为0,倒着数第一个元素为-1
* @param val 插入的值
*/
function insertStr(src, pos, val) {
if (pos < -src.length - 1 || pos > src.length)
throw "insert position is error";
if (pos >= 0)
return src.slice(0, pos) + val + src.slice(pos);
else
return src.slice(0, src.length + 1 + pos) + val + src.slice(src.length + 1 + pos);
}
//测试用例1
let str = "0123456789";
console.log(str.length);
for (let i = -13; i <= str.length + 1; i++) {
try {
console.log(i, insertStr(str, i, "###"));
}
catch (e) {
console.log(i, e);
}
}
//测试用例2
str = "";
console.log(str.length);
for (let i = -2; i <= str.length + 1; i++) {
try {
console.log(i, insertStr(str, i, "###"));
}
catch (e) {
console.log(i, e);
}
}