我正在数据库中执行查询,该查询返回一个JavaScript对象,其中包含多个子对象。我应该找到一个特定的键值对,但是检索此数据失败。
我试图将结果推入一个空数组,如下所示:
const query = []
...
query.push(result[0].name)
query.push(result[0].token)
console.log(query) // returns ['Walther', 'abcdef']
这很好,但是需要对所需查询进行硬编码。我想通过使用token
作为整个对象中搜索查询的变量,以更动态的方式执行查询。
正在使用的对象具有以下格式:
{
'0':
{ token: 'abcdef', name: 'Walther' },
'1':
{ token: 'ghijkl', name: 'Peter' },
'2':
{ token: 'mnopqr', name: 'David' },
'3':
{ token: 'stuvwx', name: 'Paul' },
// etc.
}
问题是:如何在此JavaScript对象中找到特定令牌的响应值?
答案 0 :(得分:1)
如果要查找与给定标记匹配的所有对象,请尝试在对象值上使用Array.prototype.filter()
方法。像这样:
const obj = {
"0": { token: "abcdef", name: "Walther" },
"1": { token: "ghijkl", name: "Peter" },
"2": { token: "mnopqr", name: "David" },
"3": { token: "stuvwx", name: "Paul" }
};
const getObjectsByToken = queryToken =>
Object.values(obj).filter(({ token }) => token === queryToken);
console.log(getObjectsByToken("abcdef"));
如果令牌是唯一的,则可以使用Array.prototype.find()
方法。像这样:
const getObjectByToken = queryToken =>
Object.values(obj).find(({ token }) => token === queryToken);
console.log(getObjectByToken("abcdef"));
如果您想玩this sandbox,则可以签出。让我知道是否有帮助。
答案 1 :(得分:0)
尝试以下代码段:
const data = {
'0': {
token: 'abcdef',
name: 'Walther'
},
'1': {
token: 'ghijkl',
name: 'Peter'
},
'2': {
token: 'mnopqr',
name: 'David'
},
'3': {
token: 'stuvwx',
name: 'Paul'
},
}
for (const [key, val] of Object.entries(data)) {
console.log(`key: ${key} token: ${val.token}`)
}
答案 2 :(得分:0)
使用Object.values获取对象并使用查找或过滤器
var foo = {
'0':
{ token: 'abcdef', name: 'Walther' },
'1':
{ token: 'ghijkl', name: 'Peter' },
'2':
{ token: 'mnopqr', name: 'David' },
'3':
{ token: 'stuvwx', name: 'Paul' },
// etc.
}
// if one
const result = Object.values(foo).find(obj=>obj.token === 'mnopqr')
console.log(result)
//if multiple, use filter
const result2 = Object.values(foo).filter(obj=>obj.token === 'mnopqr')
console.log(result2)
答案 3 :(得分:0)
如果您想将此Object
转换成Array
形式,则只需使用Object.keys()
和map()
const getArray = (obj) => {
const array = Object.keys(obj).map((r) => { return obj[r]; });
return array;
};
const object = {
0:
{ token: 'abcdef', name: 'Walther' },
1:
{ token: 'ghijkl', name: 'Peter' },
2:
{ token: 'mnopqr', name: 'David' },
3:
{ token: 'stuvwx', name: 'Paul' },
};
const result = getArray(object);
console.log(result);
如果您想基于filter
应用token
,那么filter()
将为您提供帮助。
const filterWithToken = (obj, token) => {
const array = Object.keys(obj)
.map((m) => { return obj[m]; })
.filter((r) => { return r.token && (r.token === token); });
return array;
};
const object = {
0:
{ token: 'abcdef', name: 'Walther' },
1:
{ token: 'ghijkl', name: 'Peter' },
2:
{ token: 'mnopqr', name: 'David' },
3:
{ token: 'stuvwx', name: 'Paul' },
};
const result = filterWithToken(object, 'ghijkl');
console.log(result);
答案 4 :(得分:0)
有多个选项:
// You can find query in the object by key
const requiredToken = <some token>;
const query = Object.keys(obj)
.find((key) => obj[key]token === requiredToken);
// OR you can transform your data into array
const dataArray = Object.values(obj)
const query = dataArray.find((value) => value.token === requiredToken);
// OR you can transform you data into something more convenient
const transformedData = Object.keys(obj).reduce((transformedData, key) => {
const value = obj(key);
transformedData[value.token] = value;
return transformedData;
}, {});
const query = transformedData[requiredToken];