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我的错,我错过了告诉它是关联数组的标题。我只看了描述。你是对的。