Javascript 如何通过公共函数从JS对象中提取键值?
我试图从JS对象中提取一个值 这是我的数据-Javascript 如何通过公共函数从JS对象中提取键值?,javascript,Javascript,我试图从JS对象中提取一个值 这是我的数据- var data = { "productServicing": { "title": "Personalization", "varients": { "MachineEngraving": { "title": "Standard Engraving", "styles": { "Block": "Block", "Roman": "Sterl
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
试试看。类型是否始终是变体属性,样式是否始终是样式属性?