javascript - “枚举”具有自定义数字序列的字符串?
问题描述
我正在编写一个函数,该函数letters(text)
接受一个字符数奇数的字符串,并制作一个字典,根据它们在字符串中的位置为每个字母赋予一个数值。这个函数不是用它们的索引枚举字母,而是给它们从 -(lengthOfString/2) 到 (lengthOfString/2) 的值,这样中间的字符总是为零。
>>>letters("stack")
{"S": -2, "T": -1, "A": 0, "C": 1, "K": 2}
我对 JavaScript 还很陌生,即使我的代码很难完成它的工作,我认为这不是正确的方法。另外我需要检查文本是否只包含字母,字母数量不均匀并且不包含两次相同的字母。我找不到抛出断言错误的方法以及如何制定最后一个条件。
function letters(text){
text= text.toUpperCase();
if(text.length % 2 !== 1 && /^[a-zA-Z]+$/.test(text)){
}
const len = text.length;
const limit = parseInt(len/2);
var list = text.split("");
var dict = {};
for (let j = -limit; j<=limit; j++){
list.push(j)
}
for (var range = 0; range < list.length/2;range++ ) {
dict[list[range]] = [];
dict[list[range]].push(list[range + list.length / 2]);
}
return dict
}
console.log(letters("stack"))
解决方案
您可以简单地:
const letters = (txt) => {
if(txt.length%2==0){throw "even length exeption";return}
let out = {}
for (var x = 0; x < txt.length; x++)
{
out[txt.charAt(x)] = x - (txt.length-1)/2
}
return out
}
console.log(letters('stack'))
console.log(letters('stackk'))
推荐阅读
- xamarin - 如何在堆栈布局/列表视图 [Xamarin.Forms] 的每一行中显示视频?
- python - 使用 For 循环生成数据框
- enumeration - Presto 中是否有 ENUM 类型?
- machine-learning - sklearn:“布尔”对象没有属性“任何”
- python - Detectron2 Panoptic FPN 模型部分执行 - TypeError:“NoneType”对象不可迭代
- swift - 谷歌地图 API Swift;无机动响应
- typescript - 检查递归类型是否以某种类型结束
- python - Python split 函数显示一些错误的结果
- c++ - 使用一维向量 C++ 的 PPM 图像翻转
- angular - Angular 组件始终显示根视图