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

JS getting value of object with key starting with a string

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

示例:

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

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

谢谢

您可以创建辅助函数

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

findValueByPrefix(obj, "key1");

正如 Kenney 评论的那样,上述函数将 return 首先匹配。

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

    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

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

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')]);

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

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

这是一个片段:

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),
)