将数组键转换为数字node.js

时间:2016-05-17 16:29:43

标签: javascript node.js

我遇到的问题是我有这样的数组:

var users = {
    'asidfjasd': {
       realname: 'John'  
    },
    'ggggggg': {
       realname: 'Peter'  
    }
}

我想用

访问用户
users[1]

获取

'ggggggg': {
       realname: 'Peter'  
}

有没有办法用node.js做到这一点?

修改

我找到了一种解决方法,方法是创建一个带有用户名的第二个对象,并指向users-object的id。 这可能不适用于其他应用程序,但它是为我做的。

CLOSED

1 个答案:

答案 0 :(得分:2)

你应该仔细看看你想要使用的结构。

可以使用键访问对象。密钥是唯一的,无序。我认为你改变的例子是正确的(我添加了一个额外的属性,以便在后面的例子中使用)。

因此...

var users = {
    'asidfjasd': {
       realname: 'John'  
    },
    'ggggggg': {
       realname: 'Peter'  
    },
    'aaaa': {
       realname: 'Peter'
    }
}

users.ggggggg // { realname: "Peter" }
users['ggggggg'] // { realname: "Peter" }

现在,可以使用Object.keys(users) 迭代

var keys = Object.keys(users);

要将名称记录到控制台,您可以执行以下操作:

keys.forEach(function (el) {
  console.log(users[el].realname);
});

要返回一个名称数组,您可以这样做:

var names = keys.map(function (el) {
  return users[el].realname;
});

如何将当前数据转换为可通过数字索引访问的数组:

var arrayOfObjs = keys.map(function (el) {
  return { socketname: el, realname: users[el].realname };
});

输出

[
  { "socketname": "asidfjasd", "realname": "John" },
  { "socketname": "ggggggg", "realname": "Peter" }
]

然后,您可以使用数组方法从对象中提取所需的信息。假设您想获得一个对象数组,其中真实姓名是"彼得"假设多个" Peters"在数据中:

var peters = arrayOfObjs.filter(function (el) {
  return el.realname === 'Peter';
});

输出

[
  { "socketname": "ggggggg", "realname": "Peter" },
  { "socketname": "aaaa", "realname": "Peter" }
]

DEMO CODE