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 字符串 - 无法解析以数字开头的键