React JS useState получить ключ, значение которого равно true

#javascript #object #javascript-objects

Вопрос:

здесь простой вопрос. Как я могу найти ключ в состоянии, в котором значение истинно? Например. Допустим, у меня есть этот набор в качестве состояния:

 const [page, setPage] = useState({
        1: false,
        2: false,
        3: false,
        4: true,
        5: false,
        6: false,
        7: false
    });
 

Как я могу вернуть ключ, значение которого равно true? в данном случае 4?

Я также хотел бы вернуть длину пар ключ / значение (7) и даже иметь возможность перебирать пары ключ / значение, но это не так важно, как мой главный вопрос.

Надеюсь, вы сможете помочь. Спасибо.

Комментарии:

1. Этот вопрос не связан с реакцией, ни с крючком, ни с использованием; это проблема javascript

2. Я знаю, как перебирать объекты и массивы, получать ключи и длину и т. Д., Но не через состояние в React, поскольку я новичок в этом. Например. длина в javascript возвращает длину массива, но это не работает с объектом состояния, поскольку он пытается найти значение с помощью ключа . длина. Так что это действительно проблема, с которой я сталкиваюсь с реакцией, реактивными крючками и useState.

Ответ №1:

Вы можете выполнить итерацию по объекту, используя

  • Object.keys(myObject) это вернет все ключи.
  • Object.values(myObject) это вернет все значения.
  • Object.entries(myObject) это вернет все ключи и значения.

Должно выглядеть так:

 for (const [key, value] of Object.entries(page)) {
  if (value) {
     console.log(key);
  }
}
 

Ответ №2:

Вы можете использовать Object.entries() для получения массива [key, value] пар, а затем использовать все соответствующие методы/свойства массива:

 const page = {
  1: false,
  2: false,
  3: false,
  4: true,
  5: false,
  6: false,
  7: false
}

const entries = Object.entries(page)

console.log({ firstTrue: entries.find(([, v]) => v)?.[0] })

console.log({ numberOfKeys: entries.length }) 

Однако было бы проще просто сохранить состояние в виде массива:

 const page = [false, false, false, true, false, false, false]

console.log({ firstTrueIndex: page.findIndex(v => v) })

console.log({ numberOfItems: page.length }) 

Ответ №3:

Попробуй это :

 const [page, setPage] = useState({
        1: false,
        2: false,
        3: false,
        4: true,
        5: false,
        6: false,
        7: false
    });
    let trueValue=[];
    for (let i in page)
    {
      if (page[i] === true)
      trueValue.push(i);
    }
    console.log(trueValue);
 

Этот код повторит объект и выдаст ключ, когда значение равно true.