如何根据传递的值从对象中查找键值

我在JavaScript中有以下对象:


{

  "key1":"value1,value2,value3",

  "key2":"value4,value5,value6"

现在,我想解析一个特定的值,如果该值存在,我想返回与其关联的键。假设我传递的是'value3',它应该返回key1;如果通过了value5,它应该还给我key2,依此类推。


在记住执行时间的同时,使用Java来实现它的最佳方法是什么。我一直在使用像刺痛处理函数尝试indexOf,substr; 但我认为不是最有效的。


忽然笑
浏览 201回答 3
3回答

海绵宝宝撒

对我来说,最快,最简洁的方法是将源对象项与目标对象项组合Array.prototype.find()并String.prototype.includes()抛出:const src={"key1":"value1,value2,value3","key2":"value4,value5,value6"};const getAkey = (obj, val) => (Object.entries(obj).find(entry => entry[1].split(',').includes(val)) || ['no match'])[0];console.log(getAkey(src, 'value1'));console.log(getAkey(src, 'value19'));ps while filter(),or或reduce()orforEach()将遍历整个数组,find()在找到匹配项时立即停止,因此,如果性能很重要,我会坚持使用后者

哆啦的时光机

您可以尝试遍历对象中的每个值,然后在每个逗号上拆分该值,然后检查该值是否在返回的数组中,如下所示:const myObj = {"key1":"value1,value2,value3","key2":"value4,value5,value6"} function findKeyByValue(obj, value) {    for (var key in myObj) {        const valuesArray = myObj[key].split(',')        if (valuesArray.includes(value)) {            return key        }    }}const key = findKeyByValue(myObj, 'value5') // returns 'key2'console.log(key)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript