2017-02-11 3 views
0

Ответ о ошибке от API Rails дает мне это JSon тело:Angular2 - как destructure в Rails ошибочный ответ JSON в строку

{ «мобильный»: [ «уже занято»], «электронная почта»: ["уже принято"]}

Как вы можете видеть, каждое поле может содержать массив сообщений об ошибках, связанных с ним.

Я пытаюсь «деконструкции» это в простой строки:

«мобильный уже занято, электронная почта уже принято»

Я пытался использовать карту и предоставить ему функции. Очевидно, мне нужно учитывать тот факт, что в этих массивах может быть несколько элементов, например:

{"mobile": ["уже принят", "должен начинаться 07 для Великобритании"], "электронная почта": [ «уже принято»]}

, которые должны затем стать:

«мобильный уже принято, мобильный должен начинаться 07 для Великобритании, электронная почта уже принято»

+0

У вас есть какой-либо пример кода, что вы уже пробовали? – PierreDuc

+0

Код, который я пробовал, был настолько ужасен, что я его выбросил. Я новичок в использовании карты. – rmcsharry

ответ

1

это можно сделать так:

let a = JSON.parse('{"mobile":["is already taken","must start 07 for UK"],"email":["is already taken"]}'); 
let message = Object.keys(a).reduce((prev, next) => prev.concat(a[next].map(v => next + ' ' + v).join(', ')), []).join(', '); 
+0

Спасибо за быстрый ответ. Хотя я пытаюсь изучить FP, это (как нуб) кажется довольно сложным по сравнению с ответом PierreDuc. Мне кажется, что поддерживать его решение намного проще ... меня отвлекает FP от того, что он делает, когда код настолько нечитабелен ... но, возможно, это просто отсутствие опыта. – rmcsharry

+0

90% этого кода являются стандартными методами 'Array', а новые функции стрелочной стрелки позволяют использовать более подробный синтаксис. – kemsky

+0

Думаю, мне просто нужно больше практиковать карту и уменьшить ... БОЛЬШЕ больше, LOL. – rmcsharry

1

Без каких-либо реальных усилий на вашей руке или, по крайней мере, никакого кода не предусмотрено, это похоже на выполнение домашней работы. С другой стороны, это забавные вещи, которые мне нравятся. Нет необходимости в картах или что-то еще. Просто скажем Тип:

let errorMessages: string[] = []; 

let json: string = {"mobile":["is already taken","must start 07 for UK"],"email":["is already taken"]}; 

let keys: string[] = Object.keys(json); 

for(let key of keys) { 
    for(let msg of json[key]) { 
     errorMessages.push(key + ' ' + msg); 
    } 
} 

console.log(errorMessages.join(', ')); 
+0

Спасибо, но я пытаюсь получить функциональное программирование и избегать использования циклов. По крайней мере, вы получили больше, чем я, даже используя цикл for. :) – rmcsharry

+0

Это на самом деле довольно умно, спасибо, я многому научился, пытаясь найти решение. – rmcsharry

+1

Verbosity против одного лайнера. Где провести линию. Мне лично нравится простой код с кодовым кодированием. Как вы упомянули выше, это упрощает чтение, отладки и поддержку. Очевидно, что с таким маленьким примером, как это, нет большой разницы. Полагаю, это сводится к тому, что ваш codestyle. Хотя я очень хорошо знаком с сокращением/картой, мне потребовалось некоторое время, чтобы понять, что здесь происходит :) – PierreDuc