如何使用循环访问对象中已存在的数组中的嵌套对象

时间:2018-07-27 01:59:38

标签: javascript

var jsonObj = [
   {
      property1 : "one",
      property2 : "two",
      property3 : "three",
      property4 : [
         {
            name: "nicholas",
            name1: "cage"
         },
         {
            name: "stuart",
            name1: "walker"
         }
      ]
   }
];

var strBuilder = [];

for(var key in jsonObj){
   if (jsonObj.hasOwnProperty(key)) {
       strBuilder.push("Key is " + key + ", value is " + jsonObj[key] + "\n");
   }
}

alert(strBuilder.join(""));

当对象接近属性4时,我正在获取对象 但我想循环访问整个代码。

3 个答案:

答案 0 :(得分:1)

当您进入property4时,您的函数会尝试将对象数组转换为字符串,正如您所注意到的那样,它不能很好地工作。您需要获取数组中的每个对象,并以与处理当前对象相同的方式对其进行处理。一种实现方法是创建一个接受对象的函数,就像您一样打印键,但是当看到一个数组时,它将接受每个键并将其传递回该函数。这称为递归。这是处理嵌套数据的好方法,特别是如果您不提前知道如何嵌套数据。

这里有一些东西可以开始:

var jsonObj={property1 : "one",property2 : "two",property3 : "three",property4 : [{name: "nicholas",name1: "cage"},{name: "stuart",name1: "walker"}]};

var strBuilder = [];

function stringer(obj) {
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (Array.isArray(obj[key])) {
        strBuilder.push("Key is " + key + ", value is an array containing: \n")
        obj[key].forEach(item => stringer(item)) // call it recursively
      } else {
        strBuilder.push("Key is " + key + ", value is " + obj[key] + "\n");
      }
    }
  }
}
stringer(jsonObj)
console.log(strBuilder.join(''))

您应该能够对此进行修改,以获得更好的格式设置,并根据需要处理各种嵌套的事物(例如对象)。

答案 1 :(得分:1)

如您所见,对象被强制转换为字符串本身,而不是对象内部的内容。您可能想先获取内容。

所以我将您的代码修改为递归函数。

var jsonObj = [
   {
      property1 : "one",
      property2 : "two",
      property3 : "three",
      property4 : [
         {
            name: "nicholas",
            name1: "cage"
         },
         {
            name: "stuart",
            name1: "walker"
         }
      ]
   }
];

function objectStringer(obj){
	var strBuilder = [];
    for(var key in obj){
       if (obj.hasOwnProperty(key)) {
			if(typeof(obj[key]) == 'object')
				strBuilder.push(objectStringer(obj[key]).join(""))
			else
           		strBuilder.push("Key is " + key + ", value is " + obj[key] + "\n");
       }
    }
	return strBuilder;
}

console.log(objectStringer(jsonObj).join(""));

答案 2 :(得分:0)

当键是对象时创建另一个循环

for(var key in jsonObj){
if (jsonObj.hasOwnProperty(key)) {
   strBuilder.push("Key is " + key + ", value is " + jsonObj[key] + "\n");
 }
if(typeof key==object){
for(var x in key){
if (jsonObj.hasOwnProperty(x)) {
   strBuilder.push("Key is " + x + ", value is " + key[x] + "\n");
  }
}