【问题标题】:Copy object to an array将对象复制到数组
【发布时间】:2017-09-19 00:06:12
【问题描述】:

我正在尝试将对象 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

【问题讨论】:

  • userinfo[user] 没有多大意义,user 要么是未定义的,要么是一个对象。对象键始终是字符串。
  • 因此,您的示例中的对象类型存在一些问题。您的 JSONstring var 是一个对象,它没有 .length 成员。您的用户信息“数组”也是一个对象。
  • 请注意变量名JSONstring 具有极大的误导性,因为变量的值是一个数组,而不是字符串(包含 JSON)。调用 JavaScript 对象“JSON”是一个(不幸的)常见错误。
  • @FelixKling ok 会记住这一点
  • @Ken: NVM 然后 :)

标签: javascript arrays json list object


【解决方案1】:

其实你当前的代码有几个问题:

  • userinfo[user]是不正确的,如果你想访问userinfoobject的userproperty你需要给它一个像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]);
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

注意:

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

【讨论】:

  • 为什么console.log现在变成0了?
  • 因为循环中需要i,我们应该push(user),我编辑了我的答案。
猜你喜欢
  • 2019-05-12
  • 2020-08-23
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多