Javascript 从对象数组中从对象检索数据
我有一个这样的对象列表 我现在被卡住了,不知道如何通过提交密钥来检索对象的值Javascript 从对象数组中从对象检索数据,javascript,Javascript,我有一个这样的对象列表 我现在被卡住了,不知道如何通过提交密钥来检索对象的值 "ListOfObjects": [ { "SomethingToRetrieve": "This Is The First Value" }, { "AnotherThingToRetrieve": "This Is Another Value " }, { "LastToRetrieve": "This Is the Last
"ListOfObjects": [
{
"SomethingToRetrieve": "This Is The First Value"
},
{
"AnotherThingToRetrieve": "This Is Another Value "
},
{
"LastToRetrieve": "This Is the Last Value"
}
]
我希望通过创建一个函数:
retrieveValue(Key){
// by giving as Example AnotherThingToRetrieve
// It will return the Value of this key
//return "This Is Another Value "
}
在json上使用
forEach
<代码>对象。键(e)将为您提供对象文本内部的键
循环浏览JSON
在对象文字{}
与键匹配
返回值
如果匹配
var ListOfObjects=[{“SomethingToRetrieve”:“这是第一个值”},{“AnotherThingToRetrieve”:“这是另一个值”}{
“LastToRetrieve”:“这是最后一个值”}]
函数getVal(键){
forEach(函数(e){//步骤#1
Object.keys(e).forEach(函数(eachKey){//step#2
如果(key==eachKey){//步骤#3
console.log(e[key]);
返回;
}
})
})
//使用find的一行程序
警报(Object.values(listoobjects.find(el=>Object.keys(el.find)(ee=>ee==key)))
}
getVal(“另一个要检索的内容”)代码>您可以筛选具有该键的所有对象,然后从第一个匹配对象返回值。如果您在最后不使用[0]
,您将得到一个包含所有匹配值的数组
var listOfObjects=[
{
“SomethingToRetrieve”:“这是第一个值”
},
{
“另一个要检索的内容”:“这是另一个值”
},
{
“LastToRetrieve”:“这是最后一个值”
}
]
const retrieveValue=key=>listOfObjects.filter(x=>x[key]).map(x=>x[key])[0];
log(retrieveValue(“AnotherThingToRetrieve”)
您有一个嵌套数组。您可以运行嵌套的for
循环来迭代它,直到找到如下匹配:
var listOfObjects=[
{
“SomethingToRetrieve”:“这是第一个值”
},
{
“另一个要检索的内容”:“这是另一个值”
},
{
“LastToRetrieve”:“这是最后一个值”
}
]
var key=“LastToRetrieve”;
console.log(retrieveValue(key));
函数检索值(键){
//通过给出另一个例子来回顾
//它将返回该键的值
//return“这是另一个值”
var值=”;
for(列表对象中的var obj){
for(listOfObjects[obj]中的变量项){
如果(项===键){
值=对象列表[obj][item];
打破
}
}
}
返回值;
}
如果您试图读取不存在的属性的内容,您将得到未定义的。将此与for
循环结合起来,您就快完成了。请详细说明这里的确切目标是什么?例如:retrieveValue(Key='SomethingToRetrieve'){return“这是另一个值”}@LisaLearningLinux请参阅我的答案这只适用于只有一个属性的对象。OPs函数名为retrieveValue
。如果单数是有意使用的,那么您可能希望使用.find()
,这样,如果只有一个键/值可供查找,您就不会搜索整个数组。@Andreas是的,它将始终有一个值,有没有办法使用find执行此操作?@LisaLearningLinuxvar retrieveValue=key=>ListOfObjects.find(x=>x[key])[key]代码><代码>检索值(“其他内容检索”);//“这是另一个值”
@Andreas true。这里有一个更好的版本:var retrieveValue=key=>(listoobjects.find(x=>x[key])|{}[key]代码>虽然此代码可能会回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。这正是我想要做的。请解释一下过滤器-->映射我们是如何得出此结果的,好吗?对不起,我还是learning@LisaLearningLinux,filter方法通过过滤掉所有未通过提供函数的元素来创建新数组-要通过测试,函数必须返回true(或truthy)值。在这种情况下,如果x
(当前元素)具有所需的属性key
(除非它是空字符串),它将返回一个真实值。map方法创建一个相同长度的新数组,并通过对每个元素应用给定的函数对其进行变换。在本例中,我们提取给定键的值x[key]
。现在我们有了一个包含所有匹配值的数组。