2017-11-04 86 views
-1

不确定我的标题是否描述了我想要正确执行的操作。基本上,我想要一个从包含对象的对象中提取属性的函数。我将需要遍历包含同一类的许多对象的各种数组,并提取特定的值。将未知数量的嵌套对象属性传递给函数

myarray1[ 
0: 
    object1 = { 
     objectProp1: { 
      objectProp1Prop1:"Hello", 
      objectProp1Prop2:"Goodbye", 
      objectProp1Prop3:{ 
       objectProp1Prop3Prop1: "Come here", 
       objectProp1Prop3Prop2: "Go away" 
      }, 
     }, 
     objectProp2: "Yo", 
     objectProp3: "Seeya", 
    } 
1: 
    object2 = { same as object1 but with other property values } 
]; 

myarray2[ 
0: { different type of object with a different set of nested properties that the function can extract } 
1: { idem } 
]; 

function extractProperty(objectArray, property) { 
    //How do I write this code? 
    propertyvalue = objectArray.property; 

    return propertyvalue; 
} 

extractProperty(myarray1[0], object.objectProp3) = "Seeya" 
extractProperty(myarray1[0], object.objectProp1.objectProp1Prop1) = "Hello" 
extractProperty(myarray1[0], object.objectProp1.objectProp1Prop3.objectProp1Prop3Prop1) = "Come here" 

在最后的代码的函数需要能够遍历所有数组键并创建包含从原来的阵列中的每个对象所选择的属性的数组列表,而是我可以管理。这是将需要从数组中的对象中提取的特定属性发送到我不知道该怎么做的函数中。

是否有一种通用的方法来将属性的“路径”发送到函数中,然后在那里使用它?怎么样?

感谢您的帮助!

+0

不,因为我不知道如何将需要提取的特定属性发送到函数中并从那里使用它。这个问题不是很清楚吗? –

+0

对不起,我上面的评论是对已经被作者或mods删除的东西的回应。 –

回答

-1

你可以尝试递归:

object1 = { 
     objectProp1: { 
      objectProp1Prop1:"Hello", 
      objectProp1Prop2:"Goodbye", 
      objectProp1Prop3:{ 
       objectProp1Prop3Prop1: "Come here", 
       objectProp1Prop3Prop2: "Go away" 
      }, 
     }, 
     objectProp2: "Yo", 
     objectProp3: "Seeya", 
    }; 

object2 = { 
    objectProp1: 'test1', 
    objectProp2: 'test2' 
} 

var myArray = [object1, object2]; 

function getProp(objArray, prop) { 
    for(var key in objArray) { 
     if (key == prop) 
      return objArray[key]; 
     if (typeof objArray[key] == 'object') 
      return getProp(objArray[key], prop); 
    } 
} 

//test 
document.getElementsByTagName('h1')[0].innerHTML = getProp(myArray[0],'objectProp1Prop3Prop1'); 

我加了一个小提琴为你试试吧:https://jsfiddle.net/afabbro/vrVAP/

-1

看起来像一个分配给我。所以我不会给你代码,但会解释方法。

  1. 首先,你需要通过属性名称作为字符串
  2. 在你的功能,你需要分割基于分隔符的字符串,如.
  3. 保持当前对象的引用
  4. 然后遍历从#2获得的所有属性名称
  5. 从当前对象获取当前属性名称,并用返回的值替换当前对象。
  6. 最后返回当前对象。

注意:您需要在两者之间添加一些验证。我已经跳过了这些供你探索;)

+0

谢谢你的回复。这不是一项任务,而是一个私人项目,作为一项业余爱好来教我自己编写代码。我会尝试你的方法,看看我能否理解它! –