如何在JS中的另一个函数中循环一个函数返回的对象?

时间:2019-02-18 07:34:53

标签: javascript

我在js中遇到问题。我有一个函数,例如:

function robePersos() {
    var persos = {"player" : "data"};    
    return persos;
}

然后我有另一个调用robePersos()的函数,如下所示:

function test() {
    var d = robePersos();
    for(var k in d) {
        console.log(k)
    }
}

但是什么也没发生。为什么?

function robePersos() {
  var persos = {
    "player": "data"
  };
  return persos;
}

function test() {
  var d = robePersos();
  for (var k in d) {
    console.log(k)
  }
}
test();

编辑 第一个片段有效。所以,这是我的真实功能:

function robePersos() {
  var persos = {};

  $.get({
         url : 'url',
         success : function(data) {
             var text = $(data).find("div[menu='perso']  a"); //.clone().children().remove().end().text();                            
             $(text).each(function(){
                 perso_name = $(this).text();
                 perso_link = $(this).attr('href');
                                   
                persos[perso_name] = perso_link;
              });
                            
                            
         }
  });
  
  for(var k in persos) {
    console.log(persos[k]);
  }
              
}

robePersos();

如果仅用console.log(persos)替换循环,则可以,但是循环不返回任何内容。为什么?

2 个答案:

答案 0 :(得分:1)

如果要同时打印键和值,请在代码中使用以下较小的更改。您的代码仅打印键。

function robePersos() {
  var persos = {
    "player": "data",
    "anotherPlayer": "anotherData"
  };
  return persos;
}

function test() {
  var d = robePersos();
  for (var k in d) {
    console.log(k, "-" ,d[k]); // change made here.  It prints both.
  }
}
test();

答案 1 :(得分:1)

尝试使用Object.keys()

function test() {
  var d = Object.keys(robePersos());
  for (var k in d) {
    console.log(k, "-" ,d[k]); // change made here.  It prints both.
  }
}

Object.keys返回一个数组,该数组的元素是与直接在对象中找到的可枚举属性相对应的字符串。属性的顺序与手动迭代对象的属性时提供的顺序相同。

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/keys