JS以字符串开头的键获取对象的值

Posted

技术标签:

【中文标题】JS以字符串开头的键获取对象的值【英文标题】:JS getting value of object with key starting with a string 【发布时间】:2016-05-18 16:28:55 【问题描述】:

有没有快速获取以某个字符串开头的键值的方法?

例子:

var obj = 
  "key123" : 1,
  "anotherkey" : 2


obj['key1'] // would return 1
obj['ano'] // would return 2

谢谢

【问题讨论】:

“快速” - 遍历它们并选择符合您要求的键名。 不是没有迭代对象键......用例是什么? 如果你有var obj = "key123" : 1, "key1" : 2 ,“obj['key1']”的值是多少? @Kenney 它应该是在对象中找到的第一个元素。在这种情况下 1 【参考方案1】:

您可以在对象的entries 上使用find。如果有一个以开头的键,则访问1 处的索引以获取值。

Object.entries(o).find(([k,v]) => k.startsWith(part))?.[1]

这是一个sn-p:

const getValue = (part, o) => Object.entries(o).find(([k, v]) => k.startsWith(part))?.[1]

const obj = 
  "key123": 1,
  "anotherkey": 2


console.log(
  getValue('key', obj),
  getValue('ano', obj),
  getValue('something', obj),
)

【讨论】:

【参考方案2】:

我们可以使用下面的单行通用自定义方法

var obj = 
      "key123" : 1,
      "anotherkey" : 2
    ;

const getObjPropForMatchPrefixKey = (object,prefix) => Object.keys(object).filter(item => item.toString().startsWith(prefix))[0];

console.log(obj[getObjPropForMatchPrefixKey(obj,'an')]);
console.log(obj[getObjPropForMatchPrefixKey(obj,'key')]);

【讨论】:

【参考方案3】:

你可以创建一个辅助函数

function findValueByPrefix(object, prefix) 
  for (var property in object) 
    if (object.hasOwnProperty(property) && 
       property.toString().startsWith(prefix)) 
       return object[property];
    
  


findValueByPrefix(obj, "key1");

正如 Kenney 所说,上述函数将返回第一个匹配项。

【讨论】:

【参考方案4】:

搜索以指定字符串开头的属性名称的第一个匹配项:

    var obj = 
        "key123": 1,
        "anotherkey": 2,
        "somekey" : 3        
    ;

    function getObjectValueByPartialName(obj, name)
        if (typeof obj !== "object") 
            throw new Error("object is required!");
        
        for (var prop in obj) 
            if (prop.indexOf(name) === 0)
                return obj[prop];
            
        
        return "no such property!";
    

    console.log(getObjectValueByPartialName(obj, 'some'));  // output: 3
    console.log(getObjectValueByPartialName(obj, 'key1'));  // output: 1

【讨论】:

以上是关于JS以字符串开头的键获取对象的值的主要内容,如果未能解决你的问题,请参考以下文章

按以某个字符串开头的键对字典进行切片

你好,js中 使用~~可以去掉字符串开头的0 但如果全是数字并很长的话,就会变成其他数字请问~~是做啥用的

get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键

从javascript中的键和字符串值获取objectId [重复]

如何从 JSON 对象中获取特定的键值

JS对象