【问题标题】:How to find multiple indexes in array of objects by the value of an object property that nests in a property of array of objects?如何通过嵌套在对象数组属性中的对象属性的值在对象数组中查找多个索引?
【发布时间】:2020-10-14 21:34:53
【问题描述】:

我有一个对象数组,每个对象都有一个“watched”属性,它本身就是一个对象数组。

let arr = 
        [ 
            {   
                id: 1, 
                name: "A", 
                watched: [ 
                            {movieId: 7, movieName: "Avatar"} , 
                            {movieId: 8, movieName: "Titanic"}
                        ]
            },
            {   
                id: 2, 
                name: "B", 
                watched: [   
                            {movieId: 1, movieName: "Armageddon"} , 
                            {movieId: 8, movieName: "Titanic"}
                        ]
            },
            {   
                id: 3, 
                name: "C", 
                watched: [   
                            {movieId: 1, movieName: "Armageddon"} , 
                            {movieId: 7, movieName: "Avatar"}
                        ]
            }

        ]

我需要一个根据给定 MovieId 的索引数组。 如果我想要一组观看过movieId的索引。 7(化身) - 我会得到:

让 AvatarWatchers = [0,2]

我试过了:

AvatarWatchers = arr.filter((item) => item.watched.find(movieObj => movieObj.movieId == 7) > -1 )

但它不起作用,我得到一个空数组。

【问题讨论】:

    标签: javascript arrays object filter find


    【解决方案1】:

    let arr = 
            [ 
                {   
                    id: 1, 
                    name: "A", 
                    watched: [ 
                                {movieId: 7, movieName: "Avatar"} , 
                                {movieId: 8, movieName: "Titanic"}
                            ]
                },
                {   
                    id: 2, 
                    name: "B", 
                    watched: [   
                                {movieId: 1, movieName: "Armageddon"} , 
                                {movieId: 8, movieName: "Titanic"}
                            ]
                },
                {   
                    id: 3, 
                    name: "C", 
                    watched: [   
                                {movieId: 1, movieName: "Armageddon"} , 
                                {movieId: 7, movieName: "Avatar"}
                            ]
                }
    
            ];
    
    let result = arr.map((item, index) => ({...item, index}))
                .filter(item => item.watched.find(watchedItem => watchedItem.movieName === 'Avatar'))
                .map(item => item.index);
    
    console.log('expected result', result);

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 1970-01-01
      • 2021-10-27
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多