在`JavaScript`中循环的两层

时间:2017-12-08 23:34:53

标签: javascript

function convertObjectToList(obj) {
  var innerArr= [];
  var outerArr=[];
  for (var prop in obj) {
    innerArr.push(prop);   
    innerArr.push(obj[prop]);  
    console.log(innerArr); 
    outerArr.push(innerArr); 
    console.log(outerArr);  
  } return outerArr;       
}

convertObjectToList({
  name: 'Holly',
  age: 35,
})

有人可以帮我弄清楚for循环中发生了什么吗? :我的问题是第二轮:outerArr[0]= [ ‘name’, ‘Holly’ ], but the console shows me outerArr[0]= [ ‘name’, ‘Holly’, ‘age’, 35 ]

实际输出
1.第一轮:innerArr=[ ‘name’, ‘Holly’ ] & outerArr = [ [ ‘name’, ‘Holly’ ] ]
2.第二轮:  innerArr=[ ‘name’, ‘Holly’, ‘age’, 35 ] & outerArr=[ [ ‘name’, ‘Holly’, ‘age’, 35 ],[ ‘name’, ‘Holly’, ‘age’, 35 ] ]

但我考虑过:outerArr= [ [ ‘name’, ‘Holly’ ], [ ‘name’, ‘Holly’, ‘age’, 35 ] ]

3 个答案:

答案 0 :(得分:2)

您可以在循环中创建内部数组的新副本。



function convertObjectToList(obj) {
  var outerArr=[];
  var innerArr = [];
  var i = 0;
  for (var prop in obj) {
    innerArr = Array.slice(innerArr);
    innerArr.push(prop);   
    innerArr.push(obj[prop]);  
    outerArr.push(innerArr);
  } return outerArr;       
}

console.log(convertObjectToList({
  name: 'Holly',
  age: 35,
}));




答案 1 :(得分:0)

使用toString()将数组转换为字符串,然后将其存储在外部数组

    function convertObjectToList(obj) {
      var innerArr = [];
      var outerArr = [];
      for (var prop in obj) {  
        var arry = []
        innerArr.push(prop.toString());
        innerArr.push(obj[prop].toString());   
        arry.push(innerArr.toString())
        outerArr.push(arry);       
      }
     
       console.log(outerArr);
      
      return outerArr;
    }

    convertObjectToList({
      name: 'Holly',
      age: 35,
    })

实际上for (var prop in obj) {}是一个foreach循环,它将导航obj数组的每个元素

答案 2 :(得分:0)

您没有推送数组的深层副本,而是再次推送同一个数组。 outerArr的每个元素都包含innerArr 我想你想要做的是为每次迭代创建一个新的innerArr。



function convertObjectToList(obj) {
  
  var outerArr=[];
  for (var prop in obj) {
    var innerArr= [];
    innerArr.push(prop);   
    innerArr.push(obj[prop]); 
    outerArr.push(innerArr);
  } return outerArr;       
}

convertObjectToList({
  name: 'Holly',
  age: 35,
})