将对象复制到数组

时间:2017-04-21 21:04:20

标签: javascript arrays json list object

我正在尝试将对象userinfo复制到数组中。当我尝试控制登录新数组时,我一直未定义。任何帮助将不胜感激!

JS:

var JSONstring = [{
  "name": "test",
  "properties": {
    "age": "19r",
    "userinfo": {
      "city": "Dallas",
      "state": "Texas"
    }
  }
}];

$(document).ready(function() {
  var userinfo = {};
  for (var i = 0; i < JSONstring.length; i++) {
    var user = JSONstring[i].properties.userinfo;
    if (user === undefined) {
      continue;
    } else if (userinfo[user] === undefined) {
      userinfo[user] = [];
      userinfo[user].push(i);
    } else {
      userinfo[user].push(i);
    }
  }
  console.log(userinfo[0]);
});

JSFiddle Demo

1 个答案:

答案 0 :(得分:2)

实际上,您当前的代码中存在一些问题:

  • 编写userinfo[user]不正确,如果您想访问user对象的userinfo属性,则需要为其添加userinfo["user"]字符串或直接userinfo.user }。
  • 最后您要尝试记录userinfo[0] undefined 因为userinfoobject,而不是array 将其更改为:console.log(userinfo.user[0])
  • 如果要将user对象存储在数组中,则应将push(i)替换为push(user)

<强>演示:

我尝试重构你的代码,这样才有意义,这就是你需要的东西:

var JSONstring = [{
  "name": "test",
  "properties": {
    "age": "19r",
    "userinfo": {
      "city": "Dallas",
      "state": "Texas"
    }
  }
}];

$(document).ready(function() {
  var userinfo = {};
  for (var i = 0; i < JSONstring.length; i++) {
    var user = JSONstring[i].properties.userinfo;
    if (!user) {
      continue;
    } else if (!userinfo.user) {
      userinfo.user = [];
      userinfo.user.push(user);
    } else {
      userinfo.user.push(user);
    }
  }
  console.log(userinfo.user[0]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意:

if块if (userinfo[user] === undefined)中的条件可以简单地写为if(!userinfo.user)