如何遍历多维 JSON 数据并将对应的值传递给函数调用

Posted

技术标签:

【中文标题】如何遍历多维 JSON 数据并将对应的值传递给函数调用【英文标题】:How to iterate through multidimensional JSON data and pass the corresponding values to a function call 【发布时间】:2020-04-14 09:36:25 【问题描述】:

我有这个 JSON 数据

settings
   "logo_dark":"logo_dark.png",
   "logo_light":"logo_light.jpg",
   "favicon":"favicon.png",
   "hero_logo":"hero_logo.jpg",
   "name":"Anime Stock",
   "short_name":"AnimeStock",
   "desc":"Description",
   "keywords":"keywords"

如何调用函数来循环遍历所有值并根据传递给函数的参数返回数据。我希望能够做这样的事情:

getSiteSettings(logo_dark); // logo_dark.png

这是我尝试过的

getSiteSettings: (state) => (item) => 
        const settings = state.siteSettings
        for (const setting in settings) 
            if (settings.hasOwnProperty(setting)) 
                const element = settings[setting].item;
                return element;   
            
        
    

【问题讨论】:

到目前为止你有什么尝试? 刚刚更新。请检查 “多维” ...在哪里?我看到了一个 settings 对象,其中包含所有具有原始值的属性列表,即没有其他维度 getSiteSettings: (state) => (item) => - 你知道getSiteSettings 是一个返回函数的函数吗?如果不是,那么用logo_dark(不正确)调用它与用"logo_dark"(正确)调用它是不一样的 这个下面还有其他数组 【参考方案1】:

理解你需要做什么有点困难。但是根据你的输出,我可以提供这样的答案。

var settings = 
   "logo_dark":"logo_dark.png",
   "logo_light":"logo_light.jpg",
   "favicon":"favicon.png",
   "hero_logo":"hero_logo.jpg",
   "name":"Anime Stock",
   "short_name":"AnimeStock",
   "desc":"Description",
   "keywords":"keywords"
;

function getSiteSettings(val)

    for(var key in settings)
        if(key === val)
            return settings[key];



console.log(getSiteSettings("logo_dark"));

【讨论】:

【参考方案2】:

如果你有一个属性数组,那么你可以filter数组如果对象中有some属性:

const result = Object.entries(obj)
    .filter(([k, v]) => props.some(s=> s == k))
    .map(([k, v])=> v);

一个例子:

let settings = 
   "logo_dark":"logo_dark.png",
   "logo_light":"logo_light.jpg",
   "favicon":"favicon.png",
   "hero_logo":"hero_logo.jpg",
   "name":"Anime Stock",
   "short_name":"AnimeStock",
   "desc":"Description",
   "keywords":"keywords"
;

const getByProperties = (obj, props) => 
    return Object.entries(obj)
        .filter(([k, v]) => props.some(s=> s == k))
        .map(([k, v])=> v);


console.log(getByProperties(settings, ['logo_dark', 'logo_light','favicon']));

【讨论】:

以上是关于如何遍历多维 JSON 数据并将对应的值传递给函数调用的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历 JSON 坐标并将注释构建为一个函数?

C,如何将多维数组传递给 CLR/类库项目中的函数

如何在 playframework 中提交带有多维数组的表单并将变量传递给控制器​​的操作

python无限遍历,实现在多维嵌套字典列表元组的JSON中获取数据

是遍历jTable并将列值传递给java中的sql查询

如何在 PHP 中循环遍历多维数组并按名称递归删除键?