使用JavaScript获取以字符串开头的键的值

12

有没有一种快速的方式来获取以某个特定字符串开头的键的值?

示例:

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

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

谢谢


“quick” 是指什么 - 迭代它们并选择与您的要求匹配的键名。 - zerkms
不迭代对象键,有什么用例? - charlietfl
3
如果有 var obj = { "key123" : 1, "key1" : 2 },那么 "obj['key1']" 的值是多少? - Kenney
@Kenney 应该是在对象中找到的第一个元素。在这种情况下是1。 - Samuel Rondeau-Millaire
4个回答

13

你可以创建一个辅助函数

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
你可以对对象的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),
)


1

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

    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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接