【问题标题】:How to iterate through multidimensional JSON data and pass the corresponding values to a function call如何遍历多维 JSON 数据并将对应的值传递给函数调用
【发布时间】: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"(正确)调用它是不一样的
  • 这个下面还有其他数组

标签: javascript arrays json vue.js


【解决方案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']));

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 2018-09-28
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多