Javascript 双向关联数组
我试图创建一个函数Javascript 双向关联数组,javascript,Javascript,我试图创建一个函数compare(),当给定字母表中的偶数字母时,该函数返回其下方索引1的字母,当给定字母表中的奇数字母时,该函数返回其上方索引1的字母(直到字母“e”)。因此: function compare(letter) { var arr = {'a':'b', 'b':'a', 'c':'d', 'd':'c', 'e':'f', 'f':'e'} return arr[letter] } 问题是这个数组将非常长,我觉得反向重复每个元素有点浪费。有没有办法修改这个函
compare()
,当给定字母表中的偶数字母时,该函数返回其下方索引1的字母,当给定字母表中的奇数字母时,该函数返回其上方索引1的字母(直到字母“e”)。因此:
function compare(letter) {
var arr = {'a':'b', 'b':'a', 'c':'d', 'd':'c', 'e':'f', 'f':'e'}
return arr[letter]
}
问题是这个数组将非常长,我觉得反向重复每个元素有点浪费。有没有办法修改这个函数,这样我就可以存储
arr={'a':'b', 'c':'d', 'e':'f'}
而不是
arr={'a':'b', 'b':'a', 'c':'d', 'd':'c', 'e':'f', 'f':'e'}+
常量字母=[“a”、“b”、“c”、“d”、“e”];
常量对=字母表。减少((acc、字母、索引)=>{
acc[字母]=字母表[索引+1]| |字母表[0];
返回acc;
}, {});
console.log(pairs)您不需要对象或数组,可以使用char代码来确定新代码应该是什么。差不多 函数getLetter(letter){ var代码=字母.charCodeAt(0); var newCode=代码%2==0?代码-1:代码+1; 返回字符串.fromCharCode(newCode); } console.log(getLetter('a')); console.log(getLetter('b')); console.log(getLetter('c')); console.log(getLetter('d')); console.log(getLetter('e'));
console.log(getLetter('f'))代码>我认为您误解了数组的概念。
arr={'a':'b','b':'a','c':'d','d':'c','e':'f','f':'e'}
不是数组,而是散列
正确的方法应该是:
function compare(letter){
var arr = ['a','b','c','d','e','f']
var index = arr.indexOf(letter)
return index % 2 == 0 ? arr[index + 1] : arr[index - 1]
}
indexOf
返回要检查的项目的位置。然后我们检查它是奇数还是偶数,并返回下面/上面对应的字母。只需检查它是偶数还是奇数,然后返回上面/下面的字母
function compare(letter) {
var code = letter.charCodeAt(0);
if (code % 2) {
return String.fromCharCode(code + 1);
} else {
return String.fromCharCode(code - 1);
}
}
示例输出:
compare('a')
"b"
compare('c')
"d"
compare('b')
"a"
compare('d')
"c"
这好像是个家庭作业问题?如果是,请阅读感谢。可简化为
newCode=code+(代码%2)*2-1代码>以某种可读性为代价,许多人认为字母A是字母表的0个字母吗?JavaScript对象实际上是关联数组的实现,因此该术语在技术上是正确的,至少与“哈希”一样正确。JavaScript编程人员通常将其称为“对象”。@Bert如果希望字母“A”为1,只需在索引值中添加1即可。@Jordan我的错,我错过了告诉它是关联数组的标题。我只看了描述。你是对的。