Javascript 如何通过公共函数从JS对象中提取键值?

Javascript 如何通过公共函数从JS对象中提取键值?,javascript,Javascript,我试图从JS对象中提取一个值 这是我的数据- var data = { "productServicing": { "title": "Personalization", "varients": { "MachineEngraving": { "title": "Standard Engraving", "styles": { "Block": "Block", "Roman": "Sterl

我试图从JS对象中提取一个值

这是我的数据-

var data = {
  "productServicing": {
    "title": "Personalization",
    "varients": {
      "MachineEngraving": {
        "title": "Standard Engraving",
        "styles": {
          "Block": "Block",
          "Roman": "Sterling Roman",
          "Script": "Script",
          "FrenchScript": "French Script",
          "ItalicRoman": "Sterling Italic",
          "American_Typewriter": "American Typewriter"
        }
      },
      "Monogrammings": {
        "title": "Monogrammings",
        "styles": {
          "Monogramming_Roman": "Roman",
          "Monogramming_Block": "Block",
          "Monogramming_Roman_Script": "Roman Script",
          "Monogramming_Round": "Round",
          "Monogramming_Script": "Script",
          "Monogramming_American_Typewriter": "American Typewriter"
        }
      },
      "HandEngravings": {
        "title": "Hand Engravings",
        "styles": {
          "Block": "Block",
          "Roman": "Sterling Roman",
          "FrenchScript": "French Script",
          "lady_bug": "Lady bug",
          "hummingbird": "Hummingbird",
          "strawberry": "Strawberry",
          "archival_horseshoe": "Archival Horseshoe",
          "lucky_7": "Lucky 7"
        }
      }
    }
  }
}
现在,我想从上面绕过varients键搜索提取值。 例如,如果我传递MachineEngraving和FrenchScript,它将返回me-FrenchScript值

我试过的-

function getTextfromData(obj, type, style){

    // obj      = data
    // type     = MachineEngraving;
    // style    = FrenchScript;

    for (var i = 0; i < obj.length; i++) {
        if (obj[i][key] == style) {
            return i;
        }
    }

console.log(getTextfromData(data.productServicing.varients, "MachineEngraving", "FrenchScript"));
}

您不需要for循环。如果您知道对象的结构,则可以执行以下简单操作:

var data={ProductServing:{标题:个性化,变量:{机器雕刻:{标题:标准雕刻,样式:{块:块,罗马:纯正罗马,脚本:脚本,法语脚本:法语脚本,斜体:纯正斜体,美式打字机:美式打字机},花押字:{标题:花押字,样式:{会标罗马:罗马,会标罗马体:块,会标罗马体:罗马体,会标罗马体:圆,会标罗马体:脚本,会标美国打字机:美国打字机},韩德文:{标题:手工雕刻,风格:{Block:Block,Roman:Sterling Roman,FrenchScript:FrenchScript,lady_bug:lady bug,蜂鸟:蜂鸟,草莓:草莓,档案_马蹄铁:档案马蹄铁,lucky_7:lucky 7}}} 函数getTextfromDataobj,类型,样式{ 返回对象[type]。样式[style] } console.log getTextfromDatadata.ProductServiceing.Varient、MachineEngraving、FrenchScript
//应该返回法语脚本您的脚本是使用命名键迭代多个对象,从而找到一个值。 在my openion中,您的函数应如下所示:

function getTextfromData1( obj, type, style){
    let keys = Object.keys(obj);  // returns keys [ 'MachineEngraving', 'Monogrammings', 'HandEngravings' ]
    let retValue ='';  // the function should return a value 

    keys.forEach( function( element){
        if (element == type) {
            let thisKeys = Object.keys( obj[element] );  // returns keys [ 'title', 'styles' ]

            let styles =  Object.keys( obj[element][ thisKeys[1] ]);

                styles.forEach( function( font ){
                    if ( font == style ) {
                        retValue = obj[element][thisKeys[1]][font];
                    }
                });

        }
    });
    return retValue;
}

let font = getTextfromData1( data.productServicing.varients, "MachineEngraving", "FrenchScript" );
console.log ( font );
或者您可以只编写一个直线箭头函数,如下所示:

const getTextfromData2 =( obj, type, style) => obj[type].styles[style];

let font2 = getTextfromData2( data.productServicing.varients, "MachineEngraving", "FrenchScript" );
console.log ( font2 );  // logs French Script

let font3 = getTextfromData2( data.productServicing.varients, "HandEngravings", "lucky_7" );
console.log ( font3 );  // logs Lucky 7
试试看。

类型是否始终是变体属性,样式是否始终是样式属性?