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

时间:2016-02-08 21:05:47

标签: javascript object key

是否有快速获取以某个字符串开头的键值?

示例:

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

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

由于

4 个答案:

答案 0 :(得分:4)

您可以创建辅助功能

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

findValueByPrefix(obj, "key1");

正如肯尼评论的那样,上述功能将返回第一场比赛。

答案 1 :(得分:0)

没有真正简单的方法可以做到这一点,因为javascript对象是哈希表,你需要在其整个表单中的键来提取它所拥有的值的内存地址。

我会把它变成一个函数并将它追加到对象的原型中,这样我们就可以在所有哈希表(javascript对象)中访问这个函数了

Object.prototype.getBy = function(value){
    for(var key in obj){
        if(key.search(value) != -1){
            return obj[key];
        }
    }
}

//so this should work
var obj = {
    "key123" : 1,
    "anotherkey" : 2
}
obj.getBy('ano'); //returns 2

//This should as well
var differentObj = {
    "somekey" : 1,
    "anotherkey" : 2
}
differentObj.getBy('some'); //returns 1

答案 2 :(得分:0)

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

    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

答案 3 :(得分:0)

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

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