Estoy obtención de datos mediante una API. Es una película, programa de televisión, persona de la base de datos. Cuando busco una palabra en el cuadro de búsqueda, devuelve los relacionados con la película, programa de televisión y nombres de persona en los objetos anidados en una matriz. por ejemplo, cuando la búsqueda de la «lucha»:

    [
    0:{original_name: "쌈 마이웨이", id: 70813, media_type: "tv", name: "Fight My Way", vote_count: 5,…}

    1:{vote_average: 8.2, vote_count: 8057, id: 550, video: false, media_type: "movie", title: "Fight Club",…}

    2:{vote_average: 6.1, vote_count: 215, id: 345922, video: false, media_type: "movie",…}

    3:{original_name: "Fight", id: 46554, media_type: "tv", name: "Fight", vote_count: 0, vote_average: 0,…}

    4:{original_name: "The Good Fight", id: 69158, media_type: "tv", name: "The Good Fight", vote_count: 22,…}

    5:{vote_average: 0, vote_count: 0, id: 158301, video: false, media_type: "movie", title: "Fight",…}
   ]

hay más resultados, pero les cortan. Como usted puede ver, hay media_type las propiedades de cada objeto. hay 3 tipos de medios, como se puede entender (el cine, la televisión, la persona). Quiero contar cada tipo.

realidad; yo quiero lo mismo en el enlace supongo: Reaccionar: Sintaxis para llamar a setState en el Interruptor de Retorno

pero no funciona para mí. Traté de cambiar simplemente el estado de movieCount a 3:

countType() {
        this.props.movies.map(movie => {
            return() => {
            if(movie.media_type === 'movie') {
                this.setState({ movieCount: 3});
                console.log(this.state);
            }
            }
        });
    }

pero no funciona demasiado.y he investigado en internet este tipo de material en javascript documentación y foros. no se trata de simplemente reaccionar. pero yo no podía hacer nada. Sé que es simple.

entonces, ¿cómo puedo contar objetos en una matriz de acuerdo a sus tipos de propiedad?

InformationsquelleAutor escalepion | 2017-06-21

3 Comentarios

  1. 3

    Suponiendo que los datos que se obtienen de la API se almacena en data variable, puede probar el siguiente código para determinar el recuento de movie tipo de medios en su matriz de datos:

    const movies = data.filter(item => item.media_type === 'movie')),
      moviesCount = movies.length;

    También se puede calcular de forma dinámica conteo de cada media_type en su matriz de datos:

    const mediaTypes = data
        .map(dataItem => dataItem.media_type) //get all media types
        .filter((mediaType, index, array) => array.indexOf(mediaType) === index), //filter out duplicates
    
      counts = mediaTypes
        .map(mediaType => ({
          type: mediaType,
          count: data.filter(item => item.media_type === mediaType).length
        }));

    Luego counts será algo como esto:

    [
      {
        "type": "tv",
        "count": 3
      },
      {
        "type": "movie",
        "count": 3
      }
    ]
    • en este código, datos paramater mis películas de la matriz? así que no necesito función de mapa?
    • Sí, data es la matriz que se registra en la pregunta. He editado la respuesta.
    • gracias hombre. acabo de resolver como: const countTypes = este.props.en las películas.filtro de película (=> película.media_type === tipo); const movieCounted = countTypes.longitud;
  2. 0
    var data = [
        { original_name: "쌈 마이웨이", id: 70813, media_type: "tv", name: "Fight My Way", vote_count: 5 },
    
        { vote_average: 8.2, vote_count: 8057, id: 550, video: false, media_type: "movie", title: "Fight Club" },
    
        { vote_average: 6.1, vote_count: 215, id: 345922, video: false, media_type: "movie" },
    
        { original_name: "Fight", id: 46554, media_type: "tv", name: "Fight", vote_count: 0, vote_average: 0 },
    
        { original_name: "The Good Fight", id: 69158, media_type: "tv", name: "The Good Fight", vote_count: 22 },
    
        { vote_average: 0, vote_count: 0, id: 158301, video: false, media_type: "movie", title: "Fight" },
    ]
    
    this.types = {};
    
    data.forEach((d) => {
        if (!this.types[d["media_type"]]) {
            this.types[d["media_type"]] = 1;
        } else {
            this.types[d["media_type"]] += 1;
        }
    })
    
    console.log(this.types);
    //you will get answer { tv: 3, movie: 3 }
  3. 0

    ok he encontrado el solition. gracias a poohitan para la respuesta. lo resuelto
    a través de su respuesta.

    countType(type) {
            const countTypes = this.props.movies.filter(movie => movie.media_type === type);
            return countTypes.length;
        }

    y mientras estoy representación de mi tv de resultados, acabo de llamar al método anterior con el tipo. por ejemplo:

    return ( 
        <div> 
          movie count: {this.countType('movie')} 
          tv show count: {this.countType('tv')} 
        </div> 
        );
    • Se rompe una vez props se actualiza. «este.props.en las películas.el filtro no es una función». Alguna idea de cómo conseguir alrededor de él ?
    • ¿Cómo se llama exactamente la función? Parece que se olvida de unión o repruebas props correctamente. (Tal vez escribió props nombre equivocado)

Dejar respuesta

Please enter your comment!
Please enter your name here