所以我想通过该对象中的id 1获取该对象:
let users = {
'users': {
'user1': {
'id': '1',
'name': 'Brandon',
'DOB': '05/04/2000'
},
'user2': {
'id': '2',
'name': 'Jefferson',
'DOB': '05/19/2004'
}
}
}
我想让它返回整个'user1'数组并记录下来,有人知道我该怎么做吗?
我到处都是stackoverflow和文档,却找不到解决方法。我可以帮忙吗?
答案 0 :(得分:1)
有几种方法,这两种方法都可以大致满足您的需求:
let users = {
'users': {
'user1': {
'id': '1',
'name': 'Brandon',
'DOB': '05/04/2000'
},
'user2': {
'id': '2',
'name': 'Jefferson',
'DOB': '05/19/2004'
}
}
}
const findUserById = (id) => {
const key = Object.keys(users.users).find(user => users.users[user].id === '1')
return users.users[key]
}
console.log(findUserById('1'))
let users = {
'users': {
'user1': {
'id': '1',
'name': 'Brandon',
'DOB': '05/04/2000'
},
'user2': {
'id': '2',
'name': 'Jefferson',
'DOB': '05/19/2004'
}
}
}
const findUserById = (id) => {
const [key, user] = Object.entries(users.users).find(([key, user]) => user.id === '1');
return user;
}
console.log(findUserById('1'))
答案 1 :(得分:0)
一个简单的for循环就可以做到:
let users = {
'users': {
'user1': {
'id': '1',
'name': 'Brandon',
'DOB': '05/04/2000'
},
'user2': {
'id': '2',
'name': 'Jefferson',
'DOB': '05/19/2004'
}
}
}
let desiredUser = {};
Object.keys(users.users).forEach((oneUser) => {
if(users.users[oneUser].id === "1")
desiredUser = users.users[oneUser];
});
console.log(desiredUser);
答案 2 :(得分:0)
您还可以使用reduce
来执行此操作...,以及如果要返回“整个”对象,也可以执行以下操作:
let USER_LIST = {
'users': {
'user1': {
'id': '1',
'name': 'Brandon',
'DOB': '05/04/2000'
},
'user2': {
'id': '2',
'name': 'Jefferson',
'DOB': '05/19/2004'
}
}
}
function findUserById(id){
return Object.entries(USER_LIST.users).reduce((a, [user, userData]) => {
userData.id == id ? a[user] = userData : '';
return a;
}, {});
}
console.log(findUserById(1));
答案 3 :(得分:0)
尽管skovy的答案是正确的,这是您在实际生产环境中应该做的,但我建议您不要在您的情况下立即应用它。
为什么?您的问题表明,您首先需要学习JavaScript程序员应具备的一些基本原理,即:
如何遍历对象的内容
用于迭代对象键的最简单方法是for .. in
循环。使用for .. in
循环遍历对象的键时,大括号内的代码将对要迭代的对象的每个键执行一次。
let users = {
"user1": {
"id": 1
},
"user2": {
"id": 2
}
}
for (let key in users) {
console.log(key);
}
上面的代码将打印:
user1
user2
从此开始,应该清楚如何找到我们想要的元素:
let foundUser = null;
for (let key in users) {
if (users[key].id === 1) {
foundUser = users[key];
break;
}
}
// now found user is our user with id === 1 or null, if there was no such user
什么时候不做
如果您有一个复杂的对象,它是另一个对象的后代,并且不想遍历继承的属性,则可以改用Object.keys
获取当前对象的键数组:
let users = {
"user1": {
"id": 1
},
"user2": {
"id": 2
}
}
const keys = Object.keys(users) // now this is an array containing just keys ['user1', 'user2'];
let foundUser = null;
// now you can iterate over the `keys` array using any method you like, e.g. normal for:
for (let i = 0; i < keys.length; i++) {
if (users[keys[i]].id === 1) {
foundUser = users[keys[i]];
break;
}
}
// or alternatively `for of`:
for (for key of keys) {
if (users[key].id === 1) {
foundUser = users[key];
break;
}
}
其他选项
您可以使用Object.values
来获取包含对象所有值的数组:
let users = {
"user1": {
"id": 1
},
"user2": {
"id": 2
}
}
const values = Object.values(users); // values: [{"id":1},{"id":2}]
您现在可以自己找到所需的条目:
let foundUser = null
for (let i = 0; i < values.length; i++) {
if (values[i].id === 1) {
foundUser = values[i];
break;
}
}
或使用数组的find method:
let foundUser = values.find(user => user.id === 1);
// now foundUser contains the user with id === 1
或者,较短且完整的版本:
let users = {
"user1": {
"id": 1
},
"user2": {
"id": 2
}
}
const foundUser = Object.values(users).find(user => user.id === 1);
// now foundUser is `{ id: 1 }`
答案 4 :(得分:0)
我同意答案。短而简单的方法就是使用.find()方法
//--data returned-----//
data = [{"Id":22,"Title":"Developer"},{"Id":45,"Title":"Admin"}]
fs.readFile('db.json','utf8', function(err,data){
var obj = JSON.parse(data);
console.log(obj);
var foundItem = obj.find(o=>o.Id==id);
console.log(foundItem);
});
答案 5 :(得分:0)
不大喜欢重新发明轮子。现在,我们将object-scan用于大多数数据处理。当您仅可以使用工具处理此类问题时,它非常方便。只需花一点时间就可以使用它。这是它如何回答您的问题:
const objectScan = require('object-scan');
const find = (id, data) => objectScan(['**.id'], {
abort: true,
rtn: 'parent',
filterFn: ({ value }) => value === id
})(data);
const users = {
users: {
user1: {
id: '1',
name: 'Brandon',
DOB: '05/04/2000'
},
user2: {
id: '2',
name: 'Jefferson',
DOB: '05/19/2004'
}
}
};
console.log(find('1', users));
// => { id: '1', name: 'Brandon', DOB: '05/04/2000' }