Соедините значения массива объектов в предложение

#javascript #node.js #arrays #javascript-objects

Вопрос:

У меня есть ответ api, который выглядит так:

 "payload": {
    "paragraph": {
        "id": 2692,
        "words": [
            {
                "id": 21679,
                "position": 2,
                "translation": {
                    "text": "something",
                    "language_name": "english"
                },
                "transliteration": {
                    "text": "another",
                    "language_name": "english"
                }
            },
            {
                "id": 21671,
                "position": 1,
                "translation": {
                    "text": "Then",
                    "language_name": "english"
                },
                "transliteration": {
                    "text": "fa",
                    "language_name": "english"
                }
            },
            ...
        ]
    }
}
 

Как я могу построить предложение из translation ключа на основе position ключа. Например, ожидаемый результат должен быть таким объектом, как:

{line: "Then something"}

Комментарии:

1. можете ли вы также показать полный ожидаемый объект

Ответ №1:

Прежде всего, вам нужно отсортировать свои positions , а затем вы можете присоединиться к ним, используя карту, как показано ниже.

 let words = [
    {
        "id": 21679,
        "position": 2,
        "translation": {
            "text": "something",
            "language_name": "english"
        },
        "transliteration": {
            "text": "another",
            "language_name": "english"
        }
    },
    {
        "id": 21671,
        "position": 1,
        "translation": {
            "text": "Then",
            "language_name": "english"
        },
        "transliteration": {
            "text": "fa",
            "language_name": "english"
        }
    }
]

let word = words
       .sort((a, b) => a.position - b.position)
       .reduce((word, w) => `${word} ${w.translation.text}`, "");

console.log(word) 

Комментарии:

1. Спасибо! это было полезно. (Будет отклонено, как только я пересеку 15 повторений 🙂 )

2. Рад, что это было полезно для вас :). Также, пожалуйста, отметьте это как ответ, который мог бы меня вдохновить!

3. не используйте map в таких случаях , используйте reduce вместо этого