有没有办法在不输入数组 [somenumber] 的情况下获取数组内的特定对象?
Posted
技术标签:
【中文标题】有没有办法在不输入数组 [somenumber] 的情况下获取数组内的特定对象?【英文标题】:Is there a way to get an specific object which is inside an array without typing array[somenumber]? 【发布时间】:2021-04-04 18:37:39 【问题描述】:我正在使用 Mongoose 处理 MongoDB,并使用 Axios 从客户端到服务器进行 GET 调用。
所以...我正在使用 Axios 进行此调用
axios.get(route).then(res =>
const races = res.data[0].InsideRaceResults
console.log(races)
)
/* AND I LOG THIS
(17) […, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …, …]
0: _id: "5fe8c55830013624e4716eed", gpId: "Austrian Grand Prix", grandPrixDate: "Sunday, July 5", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)
1: _id: "5fe8c55830013624e4716f02", gpId: "Styrian Grand Prix", grandPrixDate: "Sunday, July 12", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)
...
*/
所以,如果我想输入该数组的第一个元素,显然我会输入 [0],如果我想输入第二个元素,我会输入 [1]。
我想做的是类似于这个猫鼬查询。
StandingsModel.updateOne( "_id": "2020 Standings" ,
'$set': 'InsideRaceResults.$[race].RaceResult.$[result].driverName': 'Lewis Hamilton' ,
,
"arrayFilters": [
"race._id": fatherid ,
"result._id": childid ]
)
使用arrayFilters,我可以获得与用户键入的值匹配的数组内的对象。
但是,有没有办法用 JS 做类似的事情来得到这个......?
//This is what I tought that could be a good approach but obviusly it wasn't.
axios.get(route).then(res =>
const races = res.data[0].InsideRaceResults[gpId: "Styrian Grand Prix"]
console.log(races)
)
/* What I want to log
_id: "5fe8c55830013624e4716f02", gpId: "Styrian Grand Prix", grandPrixDate: "Sunday, July 12", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)
*/
谢谢。
【问题讨论】:
使用Array.prototype.filter
。
另外,您应该为此使用 TypeScript。否则,随着项目规模的扩大,您会遇到问题(例如,res.data
是如何定义的?)
谢谢戴,哦,我必须阅读该文档。我是新来的,所以我会尽量按照我的理解来解释。在我的服务器中,我得到了一个带有 Json 的路由,其中包含我在客户端使用的数据(使用 Axios 获取它)。该 json 只是我使用查询 model.find() 调用的来自 MongoDB 的集合。
【参考方案1】:
使用Array.prototype.filter
(和Array.prototype.map
):
const races = res.data[0].InsideRaceResults;
const filtered = races.filter( r => r.gpId === "Styrian Grand Prix" ); // Note that `filter` returns an array.
if( filtered.length === 0 )
// no results.
else if( filtered.length === 1 )
// exactly 1 match.
else
// multiple matches.
您需要决定如何处理 3 种不同的结果 filtered
案例。
【讨论】:
以上是关于有没有办法在不输入数组 [somenumber] 的情况下获取数组内的特定对象?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不重新启动调试器的情况下评估nodejs中的promise?
有没有办法确定跨域图像是不是会在不绘制画布的情况下污染画布?