【问题标题】:Javascript / React - getting first item in array that matches specific conditionsJavascript / React - 获取匹配特定条件的数组中的第一项
【发布时间】:2020-10-05 18:14:01
【问题描述】:

我有一个数组,比如说

[
    {
        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: []
    }
]

我需要找到一种方法来绘制第一个项目以达到特定条件。

我在我的 React 应用程序中进行了尝试,但很快意识到它实际上是在检查第一项而不是整个数组的条件是否为真。

    {
        lessons !== null ?

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

    }

所以本质上,我如何过滤第一项,以满足特定条件,例如item.active === true &amp;&amp; item.completed === false

【问题讨论】:

标签: javascript arrays reactjs jsx


【解决方案1】:

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))

我认为你可以使用 Array.prototype.find 函数https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

【讨论】:

    【解决方案2】:

    你可能需要filter这里:

    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);

    find 获取第一个匹配对象:

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-22
      • 2014-10-24
      • 2018-07-24
      • 2021-02-28
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多