如何使用dictionary对象来比较Javascript中给定数组的键?

如何使用dictionary对象来比较Javascript中给定数组的键?,javascript,arrays,string,dictionary,object,Javascript,Arrays,String,Dictionary,Object,我正在做一个代码挑战,我想在一个字符串中找到“最高值”的单词。我已将“a-z”字符指定为键,将数字“1-26”指定为对象中的值。我想知道是否有办法将给定字符串的单词中的字母与dictionary对象进行比较,然后开始将字母的值相加,以找到“最高值”的单词。这是我的字典对象: let testStr='伙计,我需要一辆出租车去乌布' testStr.split(“”) 常量值=[…数组(27).keys()] value.shift() const keys=String.fromCharCod

我正在做一个代码挑战,我想在一个字符串中找到“最高值”的单词。我已将“a-z”字符指定为键,将数字“1-26”指定为对象中的值。我想知道是否有办法将给定字符串的单词中的字母与dictionary对象进行比较,然后开始将字母的值相加,以找到“最高值”的单词。这是我的字典对象:

let testStr='伙计,我需要一辆出租车去乌布'
testStr.split(“”)
常量值=[…数组(27).keys()]
value.shift()
const keys=String.fromCharCode(…[…数组('z'.charCodeAt(0)-'a'.charCodeAt(0)+1).keys()]
.map(i=>i+'a'.charCodeAt(0)))
const merged=[…keys].reduce((obj,key,index)=>({…obj,
[键]:值[索引]
}), {})

console.log(JSON.stringify(merged)+'\n'+testStr)
您可以使用
map
reduce
获取每个单词的值。您还可以将单词的索引存储在值旁边,然后将值从高到低排序,然后使用[0]直接访问最高值,并按索引[1]访问单词

let testStr='伙计,我需要一辆出租车去乌布'
常量值=[…数组(27).keys()]
value.shift()
const keys=String.fromCharCode(…[…数组('z'.charCodeAt(0)-'a'.charCodeAt(0)+1).keys()]
.map(i=>i+'a'.charCodeAt(0)))
const merged=[…keys].reduce((obj,key,index)=>({…obj,[key]:value[index]}),{})
console.log(
testStr.split(“”)
.map(w=>[w.split('').reduce((a,l)=>(a+=merged[l]| 0),0),w])
.sort(([a],[b])=>b-a[0][1]
)
let testStr='伙计,我需要一辆出租车去乌布'
常量值=[…数组(27).keys()]
value.shift()
const keys=String.fromCharCode(…[…数组('z'.charCodeAt(0)-'a'.charCodeAt(0)+1).keys()]
.map(i=>i+'a'.charCodeAt(0)))
const merged=[…keys].reduce((obj,key,index)=>({…obj,
[键]:值[索引]
}), {})
console.log(JSON.stringify(合并)+'\n'+testStr)
const result=testStr.split(“”)
.减少((acc,cur)=>[
…acc,
{
姓名:cur,,
值:[…cur].reduce((求和,c)=>sum+merged[c],0)
}
], [])
.减少((上一个,当前)=>(上一个值>当前值)?上一个:当前)
名称

控制台日志(结果)a
是1,
b
是2。。。还有其他字符,如数字和空格…?您可能希望将那里的
console.log
更改为
console.log(JSON.stringify(merged,null,2)+'\n'+testStr)
,以提高可读性。代码的第2行没有任何作用:字符串是不可变的。正如旁注一样,一个不相关的解决方案:
testStr.split().map(e=>[e,e.split(“”)。reduce((p,c)=>p+c.toLowerCase().charCodeAt(0)-96,0)]).reduce((p,c)=>p[1]>c[1]?p:c);
(需要在末尾添加
[0]
,才能得到一个字)我不确定是否按原样提出util函数,因为计算映射效率很低。可能
const=(//buildthemap,返回s=>{})()
将是better@user753642这当然更好,但是用户不应该提供映射。如果它是一个真正的util函数,我会在函数外部计算映射,然后在util函数内部引用它,然后导出它。这样,它只会计算一次。非常感谢,这正是我所做的正在查找。但您在地图中到底显示了什么?reduce函数将字母的值相加,但i(索引)值代表什么?我想不出来。@ejbee3保留对原始数组的引用,但我应该只传递单词而不是索引,我现在将更新我的答案:)