有没有办法在不输入数组 [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?

有没有办法在不使用循环的情况下获得价值?

在不知道对象索引的情况下从数组中删除对象?

有没有办法确定跨域图像是不是会在不绘制画布的情况下污染画布?

vscode中有没有办法在不保存文件的情况下启用语法突出显示? [复制]

有没有办法在不硬编码的情况下获取键盘键列表及其各自的键码?