【问题标题】:How to transform an array of objects' keys and subkeys into a link to some property value?如何将对象的键和子键数组转换为指向某个属性值的链接?
【发布时间】:2019-07-11 16:31:35
【问题描述】:

我有一个数组,其中包含对象的一些键和子键:

let keysArray = ['Computer Technics', 'Laptops', 'Lenovo', 'Ideapads',];

我还有一个对象:

let obj = {
    'Computer Technics': {
        'Laptops': {
            'Lenovo': {
                'Ideapads': "data"
            }
        }
    }
};

我需要获取“数据”的链接:

obj['Computer Technics']['Laptops']['Lenovo']['Ideapads']

我不明白该怎么做..

我的意思是我写了一个自己创建链接的函数,但我不知道如何将它与 obj 连接起来

console.log(obj[getKey(keysArray)]); // obviously undefined as a result is put into '[]'
console.log(obj+getKey(keysArray)); //obviously it doesn't work too

function getKey(arr) {
    let res = '';
    for (i = 0; i < arr.length; i++) {
        res = res + '[\'' + arr[i] + '\']';
    }
    return res;
}

任何帮助将不胜感激!谢谢!

【问题讨论】:

标签: javascript arrays node.js


【解决方案1】:

你可以试试这个

var pointer = obj;
for ( key of keysArray) { pointer = pointer[key]} ;
console.log(pointer);

【讨论】:

    【解决方案2】:

    你可以使用对象引用

    let keysArray = ['Computer Technics', 'Laptops', 'Lenovo', 'Ideapads',];
    
    let obj = {
        'Computer Technics': {
            'Laptops': {
                'Lenovo': {
                    'Ideapads': "data"
                }
            }
        }
    };
    
    let getData = (arr,obj) => {
      let output = JSON.parse(JSON.stringify(obj));
      arr.forEach(val => {
        output = output && output[val]
      })
      return output
    }
    
    console.log(getData(keysArray,obj))

    【讨论】:

      【解决方案3】:

      你可以这样做:

      let keysArray = ['Computer Technics', 'Laptops', 'Lenovo', 'Ideapads',];
      
      let obj = {
          'Computer Technics': {
              'Laptops': {
                  'Lenovo': {
                      'Ideapads': "data"
                  }
              }
          }
      };
      
      const value = keysArray.reduce((a, c) => a[c], obj);
      console.log(value);

      【讨论】:

      • 可以简化为:keysArray.reduce((a, c) =&gt; a[c], obj)
      • @adiga 感谢您的建议,我没有意识到这一点。
      猜你喜欢
      • 2013-01-14
      • 2017-09-03
      • 2022-11-01
      • 2016-04-17
      • 2020-01-06
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多