【问题标题】:JS getting value of object with key starting with a stringJS以字符串开头的键获取对象的值
【发布时间】: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

标签: javascript object key


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2016-12-16
          • 2021-02-04
          • 2016-12-19
          相关资源
          最近更新 更多