#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.