Как л oop хоть записать - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть Records тип Запись :

export interface List {
  name: string;
  title: string;
}

export type RecordType
= 'recordOne'
| 'recordTwo'
| 'recordThree';

export const Records: Record<RecordType, List> = {
  recordOne: {
    name: 'Name1',
    title: 'Ausi bere ut erit adeo enim an suae'
  },
  recordTwo: {
    name: 'Name2',
    title: 'Petebat proprie suo methodo'
  },
  recordThree: {
    name: 'Name3',
    title: 'Petebat proprie suo methodo inscitiae'
  }
}

Я хочу найти запись с указанным c текстом, но для этого мне нужно l oop через Records так как бы вы это сделали? Я имею в виду, как бы вы oop подумали о Records?

По сути, это то, что я хочу:

findMatchingTitle(myString) {
   let title = '';
   this.Records.foreach(x => {

     if(myString.includes(x.title)) {
       title = x.title;
     }
   });

  return title;
}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

На самом деле не имеет отношения к TS, для поиска заголовка я сначала получу значения записей в виде массива и использую Array.find для поиска заголовка.

, если я нашел его, Я получу его название

const records = {
  recordOne: {
    name: 'Name1',
    title: 'Ausi bere ut erit adeo enim an suae'
  },
  recordTwo: {
    name: 'Name2',
    title: 'Petebat proprie suo methodo'
  },
  recordThree: {
    name: 'Name3',
    title: 'Petebat proprie suo methodo inscitiae'
  }
}

const findMatchingTitle = str => Object.values(records).find(record => record.title.includes(str))?.title

console.log(findMatchingTitle("inscitiae"))
1 голос
/ 14 апреля 2020

Как правило, для l oop через Objects вы можете сделать:

for(let prop in obj) console.log(obj[prop])

Однако машинописный текст не позволит вам сделать это без каких-либо неявных выражений, поэтому вам придется набирать приведение:

for (let prop in Records) console.log((Records as any)[prop]);

Другой способ получить l oop через свойства объекта и сравнить с помощью Object.keys и Object.values ​​, как показано ниже

function findMatchingTitle(myString: string): string {
  for (let index in Object.keys(Records)) {
    let title: string = Object.values(Records)[index].name;
    if (title.includes(myString))
      return title;
  }
  return '';
}

Альтернативно, для точного поиска это будет:

function findMatchingTitle(myString: string): string {
  for (let index in Object.keys(Records)) {
    let title: string = Object.values(Records)[index].name;
    if (title === myString)
      return title;
  }
  return '';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...