【问题标题】:Javascript - Use multiple variables for object propertyJavascript - 为对象属性使用多个变量
【发布时间】:2020-12-26 01:28:41
【问题描述】:

object.js

var a = "level_2";
var b = "level_3";
var c;

const nums = [1, 2, 3, 4];

const num_1 = nums[Math.floor(Math.random() * nums.length)];
const num_2 = nums[Math.floor(Math.random() * nums.length)];

console.log({ num_1, num_2 });

if (num_1 <= num_2) {
  c = [a];
} else {
  c = [a][b];
}

/**
 * Lets say I make a database call, the result is from a promise I use '.then()'
 * eg:
 * ...
 * .then(level_1 => {
 *      let final;
 *      final = level_1[c]
 *      res.statusCode(200).json({ final })
 * })...
 *
 * This is what I'm trying to achieve where I can determine the object property
 * how deep in the object I would like to go before I get the object.*/

const level_1 = {
  level_2: {
    level_3: "level_3",
    level_4: "level_4",
    level_5: {
      level_6: "level_6",
    },
  },
};

console.log("\nPrint 1:\n", level_1[a]);
console.log("\nPrint 2:\n", level_1[a][b]);
console.log("\nPrint 3:\n", level_1[c]);

if 语句显示了当涉及到我需要从对象中获得哪些信息时我将要处理的随机性。

结果 1: 当c[a][b] 时,这不起作用

$ node object.js
{ num_1: 4, num_2: 1 }

Print 1:
 {
  level_3: 'level_3',
  level_4: 'level_4',
  level_5: { level_6: 'level_6' }
}

Print 2:
 level_3

Print 3:
 undefined

结果 2: 这在c 如果只有[a] 时效果很好

$ node object.js
{ num_1: 2, num_2: 3 }

Print 1:
 {
  level_3: 'level_3',
  level_4: 'level_4',
  level_5: { level_6: 'level_6' }
}

Print 2:
 level_3

Print 3:
 {
  level_3: 'level_3',
  level_4: 'level_4',
  level_5: { level_6: 'level_6' }
}

如何让c 工作?如您所见,Result 1c 返回 undefined 这让我困惑了一段时间,如果有人可以帮助我,这将使我的代码非常高效。

【问题讨论】:

    标签: javascript node.js oop object


    【解决方案1】:

    如果您希望能够组合属性,请使用属性数组,或通过. 连接所有属性。然后,要检索嵌套值,请使用Accessing nested JavaScript objects and arays by string path 处的方法之一:

    const level_1 = {
      level_2: {
        level_3: "level_3",
        level_4: "level_4",
        level_5: {
          level_6: "level_6",
        },
      },
    };
    
    var a = "level_2";
    var b = "level_3";
    
    const c = [a, b];
    const getNested = (obj, props) => props.reduce((a, prop) => a[prop], obj);
    
    console.log(level_1[a]);
    console.log(level_1[a][b]);
    console.log(getNested(level_1, c));

    【讨论】:

    • 这很有帮助,我注意到了这一点。我已经编辑了我的问题,请看一下。你的答案正是我想要的。
    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2019-11-25
    • 2022-06-23
    • 1970-01-01
    • 2013-06-19
    • 2010-10-16
    相关资源
    最近更新 更多