如何通过嵌套在对象数组的属性中的对象属性的值在对象数组中查找多个索引?

问题描述

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

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

        ]

我需要根据给定的MovieId组成一个索引数组。 如果我想要一个看了movieId no的索引数组。 7(Avatar)- 我会得到:

让AvatarWatchers = [0,2]

我尝试过:

AvatarWatchers = arr.filter((item) => item.watched.find(movieObj => movieObj.movieId == 7) > -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"},{   
                id: 3,name: "C",{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);