Ronald Langeveld
Ronald Langeveld

Reputation: 744

Javascript / React - getting first item in array that matches specific conditions

I have an array, say

[
    {
        lesson: 1,
        title: "Welcome",
        slug: "welcome",
        active: active,
        breakDay: false,
        started_time: new Date(),
        finished_time: null,
        completed: true,
        sublesson: [
            {
                lesson: 1.1,
                title: "Evaluation",
                slug: 'evaluation',
                completed: false,
                answers: []
            }
        ],
        answers: []
    },
    {
        lesson: 2,
        title: "Example",
        slug: "example",
        active: active,
        breakDay: false,
        started_time: null,
        finished_time: null,
        completed: false,
        sublesson: [
            {
                lesson: 2.1,
                title: "example2,
                slug: 'example2,
                answers: []
            }
        ],
        answers: []
    }
]

I need to find a way to map out the first item to reach specific conditions.

I tried inside my React App, but quickly realised it's actually checking if those conditions are true on the first item and not the whole array.

    {
        lessons !== null ?

            lessons.map((item, index, arr) => (
                index === 0 && item.active === true ?
                <>
                <p>{item.title}</p>
                </>
                :
                null
            ))
            :
            null

    }

So essentially, how can I filter the first item, to meet specific conditions eg item.active === true && item.completed === false ?

Upvotes: 2

Views: 7013

Answers (2)

George Tibetegya
George Tibetegya

Reputation: 126

const arr = [
    {
        lesson: 1,
        title: "Welcome",
        slug: "welcome",
        active: false,
    },
    {
        lesson: 2,
        title: "Welcome 2",
        slug: "welcome",
        active: true,
    },
    {
        lesson: 3,
        title: "Example 3",
        slug: "example",
        active: true,
    }
]

console.log(arr.find(item => item.active))

I think you can use the Array.prototype.find function https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Upvotes: 2

Rajneesh
Rajneesh

Reputation: 5308

You may need filter here:

var data=[ { lesson: 1, title: "Welcome", slug: "welcome", active: 'active', breakDay: false, started_time: new Date(), finished_time: null, completed: true, sublesson: [ { lesson: 1.1, title: "Evaluation", slug: 'evaluation', completed: false, answers: [] } ], answers: [] }, { lesson: 2, title: "Example", slug: "example", active: 'active', breakDay: false, started_time: null, finished_time: null, completed: false, sublesson: [ { lesson: 2.1, title: "example2", slug: 'example2', answers: [] } ], answers: [] }];

var result = data.filter(({active, completed})=> active && !completed);

console.log(result);

Or find to get first matching object:

var data=[ { lesson: 1, title: "Welcome", slug: "welcome", active: 'active', breakDay: false, started_time: new Date(), finished_time: null, completed: true, sublesson: [ { lesson: 1.1, title: "Evaluation", slug: 'evaluation', completed: false, answers: [] } ], answers: [] }, { lesson: 2, title: "Example", slug: "example", active: 'active', breakDay: false, started_time: null, finished_time: null, completed: false, sublesson: [ { lesson: 2.1, title: "example2", slug: 'example2', answers: [] } ], answers: [] }];

var result = data.find(({active, completed})=> active && !completed);

console.log(result);

Upvotes: 6

Related Questions