Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象数组中从对象检索数据_Javascript - Fatal编程技术网

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执行此操作?@LisaLearningLinux
    var 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]
    。现在我们有了一个包含所有匹配值的数组。