我在函数内部有一个字母和数字对象。这个函数接收一个数字数组,我运行for循环,迭代对象并检查条件。如果数组中的任何数字与对象中的任何值匹配,则将 键返回到该值。
所以如果我传入switcher(['26'])
,它应该返回' a'。这可能吗?
function switcher(x){
const letters = {
a: '26',
b: '25',
c: '24',
d: '23',
e: '22',
f: '21',
g: '20',
h: '19',
i: '18',
j: '17',
k: '16',
l: '15',
m: '14',
n: '13',
o: '12',
p: '11',
q: '10',
r: '9',
s: '8',
t: '7',
u: '6',
v: '5',
w: '4',
x: '3',
y: '2',
z: '1'
};
}
我试图通过ES6 map()
方法做到这一点,但我不确定在if语句中放什么..这是我到目前为止所做的:
return x.map(function(number){
let keys = Object.keys(letters);
for(var key in letters){
if(letters[key] === number){
}
}
});
}
有更简单的方法吗?
答案 0 :(得分:3)
您可以使用Object.keys
和Array#find
来获取匹配的key
的{{1}}。
value

答案 1 :(得分:2)
我建议只交换键/值对,并使用它。
如果您希望代码进行交换,您可以在一次性操作中执行此操作(分配给numbers
Map)。这是ES6代码:
const letters = {a:'26',b:'25',c:'24',d:'23',e:'22',f:'21',g:'20',h:'19',i:'18',j:'17',k:'16',l:'15',m:'14',n:'13',o:'12',p:'11',q:'10',r:'9',s:'8',t:'7',u:'6',v:'5',w:'4',x:'3',y:'2',z:'1'};
const numbers = new Map(Object.keys(letters).map( k => ([letters[k], k])));
console.log(numbers.get('26'));
console.log(numbers.get('9'));
答案 2 :(得分:1)
您只需使用return key;
function switcher(x) {
const letters = {
a: '26',
b: '25',
c: '24',
d: '23',
e: '22',
f: '21',
g: '20',
h: '19',
i: '18',
j: '17',
k: '16',
l: '15',
m: '14',
n: '13',
o: '12',
p: '11',
q: '10',
r: '9',
s: '8',
t: '7',
u: '6',
v: '5',
w: '4',
x: '3',
y: '2',
z: '1'
};
return x.map(function(number) {
let keys = Object.keys(letters);
for (var key in letters) {
if (letters[key] === number) {
return key;
}
}
});
}
console.log(switcher(['26']));
但是如果你经常这样做,那么倒置物体的其他答案会更好。
答案 3 :(得分:1)
一个人也可以这样做;
function switcher(x){
var letters = {
a: '26',
b: '25',
c: '24',
d: '23',
e: '22',
f: '21',
g: '20',
h: '19',
i: '18',
j: '17',
k: '16',
l: '15',
m: '14',
n: '13',
o: '12',
p: '11',
q: '10',
r: '9',
s: '8',
t: '7',
u: '6',
v: '5',
w: '4',
x: '3',
y: '2',
z: '1'
};
for (var k in letters) if (letters[k] === x) return k;
return undefined;
}
console.log(switcher("14"));
答案 4 :(得分:0)
我将假设你正在使用一个你可能想要多个结果的数组进行搜索。例如,["26", "5"]
应返回["a", "v"]
。
您可以使用单行代码执行此操作:
const letters = {a:'26',b:'25',c:'24',d:'23',e:'22',f:'21',g:'20',h:'19',i:'18',j:'17',k:'16',l:'15',m:'14',n:'13',o:'12',p:'11',q:'10',r:'9',s:'8',t:'7',u:'6',v:'5',w:'4',x:'3',y:'2',z:'1'};
const search = ["26", "5"];
const results = Object.entries(letters).filter(l => search.includes(l[1])).map(l => l[0]);
console.log(results);

这是ES6后的代码。 (Array#includes
是ES2016; Object.entries
是ES2017。)然而,它很容易被多元化。
Object.entries
创建一个数组,其中对象的每个属性都是格式为[key, value]
的数组中的元素,例如["a", "26"]
。然后我们通过测试来过滤它们以查看我们的搜索数组includes是否为元素。然后我们使用Array#map
来获取每个数组中的第二个元素,即原始数组中的值。
答案 5 :(得分:0)
你甚至不需要那个查找表letters
(无论如何,这是错误的方式)。只需使用charCodeAt
和fromCharCode
将字母转换为数字并返回:
function switcher(x) {
return x.map(function(code) {
return x > 0 && x <= 26 ? String.fromCharCode(123-x) : "";
});
}
console.log(switcher([26, 1])); // ["a", "z"]