#javascript #reactjs #typescript
#javascript #reactjs #typescript
Вопрос:
у меня есть данные, подобные приведенным ниже,
const items = [
{
id: '1',
name: 'item1',
subItems: [{
id: '1',
name: 'subitem-1',
}],
},
{
id: '2',
name: 'item2',
subItems: [{
id: '2',
name: 'subitem-1',
}],
}
]
Теперь я хочу найти подпункт, который соответствует идентификатору 2. таким образом, из приведенных выше данных ожидаемый результат равен
{
id: '2',
name: 'subitem-1',
}
я пробовал что-то вроде приведенного ниже,
const subItem = Items.find(
(item: any) =>
item.subItems amp;amp;
item.subItems.some(
(subItem: any) => subItem.id === '2'
)
);
но это вернет элемент, содержащий подпункт с id = ‘2’.
как я могу исправить приведенный выше код таким образом, чтобы я получал подраздел вместо item?
может ли кто-нибудь помочь мне с этим. Спасибо.
Комментарии:
1. Будет ли когда-либо существовать только один подпункт с идентификатором 2?
2. Может ли быть только один точный подпункт или их может быть больше одного?
3. да, только один подпункт с идентификатором 2.
Ответ №1:
Вы могли бы использовать следующее, которое будет выполнять поиск и возвращать только найденный внутренний объект.
const items = [
{
id: "1",
name: "item1",
subItems: [
{
id: "1",
name: "subitem-1"
}
]
},
{
id: "2",
name: "item2",
subItems: [
{
id: "2",
name: "subitem-1"
}
]
}
];
function innerFind(array, key, value) {
for (const obj of array) {
const item = obj.subItems.find((el) => el[key] === value);
if (item != null) return item;
}
}
console.log(innerFind(items, 'id', '2'));
Вы передаете в свой массив items ключ, который вы хотите найти (‘id’), а затем значение, которое вы хотите найти (‘2’). Эта функция вернет первый найденный соответствующий подпункт.