Сопоставьте массив объектов, используя JavaScript, он возвращает неопределенные значения - PullRequest
0 голосов
/ 15 февраля 2019

В чем проблема с моим кодом ниже?Я сделал карту на основе ключа, который я хотел получить, но я получил неопределенные значения ?.Я хотел получить каждый случайный код.Он вернул, что всего 6 случайных кодов, но он не определен.Любая проблема?Спасибо.

мой код \

let result =  me.record.job_detail.questionaires.map(a => a.random_code);

результат

результат

Array(6) [ undefined, undefined, undefined, undefined, undefined, undefined ]

массив объектов (me.record.job_detail.questionaires)

["{'creation_at': '2019-02-07', 'Department': 'Sme', 'Timelimit': Нет, 'id': 16, 'sub_title': 'это экзамен ',' title ':' exam ',' random_code ': '50 -49361157339'} "," {'creation_at': '2019-02-07', 'Department': 'TEest DEP', 'ограничение по времени ': нет,' id ': 10,' sub_title ':' это тест ',' title ':' Hello ',' random_code ': '50 -612511266113'} "," {'creation_at': '2019-02-07 ',' Department ':' SYSTECH ',' timelimit ': нет,' id ': 9,' sub_title ':' Trying to test ',' title ':' Test 101 ',' random_code ':'50-8381637318 '} "," {' creation_at ':' 2019-02-07 ',' Department ':' SME ',' timelimit ': Нет,' id ': 8,' sub_title ':' просто для тестирования ', 'title': 'Exam', 'random_code': '50 -6819378387 '} "," {' creation_at ':' 2019-02-08 ',' Department ':' test ',' timelimit ': None,'id ': 35,' sub_title ':' test ',' title ':' test ',' random_code ': '50 -2143566173'} "," {'created_at ':' 2019-02-07 ',' Department ':' Test ',' timelimit ': нет,' id ': 13,' sub_title ':' test ',' title ':' test ',' random_code ': '50 -2961010112644 '} "]

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Другой вариант (поскольку у вас есть строки, а они не являются допустимыми в формате JSON), можно искать в строке имя вашего random_code числа, используя match():

const input = [
  "{'created_at': '2019-02-07', 'department': 'sme', 'timelimit': 'None', 'id': 16, 'sub_title': 'this is an exam', 'title': 'exam', 'random_code': '50-49361157339'}",
  "{'created_at': '2019-02-07', 'department': 'TEest DEP', 'timelimit': 'None', 'id': 10, 'sub_title': 'this is a test', 'title': 'Hello', 'random_code': '50-612511266113'}",
  "{'created_at': '2019-02-07', 'department': 'SYSTECH', 'timelimit': 'None', 'id': 9, 'sub_title': 'Trying to test', 'title': 'Test 101', 'random_code': '50-8381637318'}",
  "{'created_at': '2019-02-07', 'department': 'SME', 'timelimit': 'None', 'id': 8, 'sub_title': 'just to test', 'title': 'Exam', 'random_code': '50-6819378387'}",
  "{'created_at': '2019-02-08', 'department': 'test', 'timelimit': 'None', 'id': 35, 'sub_title': 'test', 'title': 'test', 'random_code': '50-2143566173'}",
  "{'created_at': '2019-02-07', 'department': 'Test', 'timelimit': 'None', 'id': 13, 'sub_title': 'test', 'title': 'test', 'random_code': '50-2961010112644'}"
];

console.log(input.map(x => x.match(/\d+-\d{3,}/g)[0]));

Однако я не рекомендую это делать, если вы действительно не уверены, что на strings.

не будет данных с аналогичным форматом.
0 голосов
/ 15 февраля 2019

me.record.job_detail.questionaires возвращает массив строк.Не массив объектов.Одним из решений было бы проанализировать ваши строковые объекты, однако на данный момент они не считаются действительными JSON, и поэтому они не могут быть переданы с использованием JSON.parse().

Таким образом, вы можете сделать вашу строку допустимой JSON, используя.replace()

Использование .replace с JSON.parse():

let arr = ["{'created_at': '2019-02-07', 'department': 'sme', 'timelimit': None, 'id': 16, 'sub_title': 'this is an exam', 'title': 'exam', 'random_code': '50-49361157339'}", "{'created_at': '2019-02-07', 'department': 'TEest DEP', 'timelimit': None, 'id': 10, 'sub_title': 'this is a test', 'title': 'Hello', 'random_code': '50-612511266113'}", "{'created_at': '2019-02-07', 'department': 'SYSTECH', 'timelimit': None, 'id': 9, 'sub_title': 'Trying to test', 'title': 'Test 101', 'random_code': '50-8381637318'}", "{'created_at': '2019-02-07', 'department': 'SME', 'timelimit': None, 'id': 8, 'sub_title': 'just to test', 'title': 'Exam', 'random_code': '50-6819378387'}", "{'created_at': '2019-02-08', 'department': 'test', 'timelimit': None, 'id': 35, 'sub_title': 'test', 'title': 'test', 'random_code': '50-2143566173'}", "{'created_at': '2019-02-07', 'department': 'Test', 'timelimit': None, 'id': 13, 'sub_title': 'test', 'title': 'test', 'random_code': '50-2961010112644'}"];

let result =  arr.map(a => JSON.parse(a.replace(/'/g, '"').replace(/: (\w+)/g, ': "$1"')).random_code);
console.log(result);

Выше я использую .replace для замены всех одинарных кавычек (') на двойные кавычки (чтобы их можно было проанализировать с помощью JSON.parse()). Я такжезатем убедитесь, что все значения (например, None) являются строками, следовательно, второе замените.Это позволит вам выполнить синтаксический анализ ваших строк в массиве, что позволит вам получить доступ к свойству .random_code.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...