Сложите строки JSON в одну переменную | JavaScript

Я пытался понять, как объединить несколько строк JSON в одну.

Мой метод таков:

if (observations[31]) { // Ignore this.
  document.getElementById("ajaxrainmo").textContent = observations[31].imperial.precipTotal + observations[30].imperial.precipTotal + observations[29].imperial.precipTotal + observations[28].imperial.precipTotal + observations[27].imperial.precipTotal + observations[26].imperial.precipTotal + observations[25].imperial.precipTotal + observations[24].imperial.precipTotal + observations[23].imperial.precipTotal + observations[22].imperial.precipTotal + observations[21].imperial.precipTotal + observations[20].imperial.precipTotal + observations[19].imperial.precipTotal + observations[18].imperial.precipTotal + observations[17].imperial.precipTotal + observations[16].imperial.precipTotal + observations[15].imperial.precipTotal + observations[14].imperial.precipTotal + observations[13].imperial.precipTotal + observations[12].imperial.precipTotal + observations[13].imperial.precipTotal + observations[11].imperial.precipTotal + observations[10].imperial.precipTotal + observations[9].imperial.precipTotal + observations[8].imperial.precipTotal + observations[7].imperial.precipTotal + observations[6].imperial.precipTotal + observations[5].imperial.precipTotal + observations[4].imperial.precipTotal + observations[3].imperial.precipTotal + observations[2].imperial.precipTotal + observations[1].imperial.precipTotal + observations[0].imperial.precipTotal + " in"
} // Adding up a bunch of rain totals to one number.

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

Почему бы не зациклиться observations? Developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…

Dom 27.08.2024 22:01
document.getElementById("ajaxrainmo").textContent = observations.reduce((a,c) => a+c.imperial.precipTotal, 0) + " in";
Iłya Bursov 27.08.2024 22:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это требует цикла! Вы много повторяете код, и это плохо. Вы можете попробовать это:

let total = 0

for (const obs of observations) {
    total += obs.imperial.precipTotal
}

document.getElementById("ajaxrainmo").textContent = total

В данном примере элементы расположены в обратном порядке.

StriplingWarrior 27.08.2024 23:35
Ответ принят как подходящий

если доступен более быстрый вариант

Я не думаю, что можно достичь цели быстрее, но можно написать читаемый и поддерживаемый код.

Я пытался понять, как объединить несколько строк JSON в одну.

Предполагая, что в массиве больше элементов, и вам нужны первые 32:

const observations = [{imperial:{precipTotal:'a1'}},{imperial:{precipTotal:'b1'}},{imperial:{precipTotal:'c1'}},{imperial:{precipTotal:'d1'}},{imperial:{precipTotal:'e1'}},{imperial:{precipTotal:'a2'}},{imperial:{precipTotal:'b2'}},{imperial:{precipTotal:'c2'}},{imperial:{precipTotal:'d2'}},{imperial:{precipTotal:'e2'}},{imperial:{precipTotal:'a3'}},{imperial:{precipTotal:'b3'}},{imperial:{precipTotal:'c3'}},{imperial:{precipTotal:'d3'}},{imperial:{precipTotal:'e3'}},{imperial:{precipTotal:'a4'}},{imperial:{precipTotal:'b4'}},{imperial:{precipTotal:'c4'}},{imperial:{precipTotal:'d4'}},{imperial:{precipTotal:'e4'}},{imperial:{precipTotal:'a5'}},{imperial:{precipTotal:'b5'}},{imperial:{precipTotal:'c5'}},{imperial:{precipTotal:'d5'}},{imperial:{precipTotal:'e5'}},{imperial:{precipTotal:'a6'}},{imperial:{precipTotal:'b6'}},{imperial:{precipTotal:'c6'}},{imperial:{precipTotal:'d6'}},{imperial:{precipTotal:'e6'}},{imperial:{precipTotal:'a7'}},{imperial:{precipTotal:'b7'}},{imperial:{precipTotal:'c7'}},{imperial:{precipTotal:'d7'}},{imperial:{precipTotal:'e7'}},{imperial:{precipTotal:'a8'}},{imperial:{precipTotal:'b8'}},{imperial:{precipTotal:'c8'}},{imperial:{precipTotal:'d8'}},{imperial:{precipTotal:'e8'}}];

const result = observations.slice(0, 32).map(o => o.imperial.precipTotal).reverse().join('') + ' in';

console.info(result);

slice(0, 32): берем первые 32 элемента (это не нужно, если вы берете все элементы массива)

map(o => o.imperial.precipTotal): сопоставьте каждый элемент массива со строкой precipTotal.

reverse(): перевернуть струны

join(''): объединить строки в одну строку без разделителя

Предположим, я неправильно понял ваш вопрос и precipTotal содержит числа, которые вы хотите суммировать, я бы пошел аналогичным путем.

const observations = [{imperial:{precipTotal:11}},{imperial:{precipTotal:21}},{imperial:{precipTotal:31}},{imperial:{precipTotal:41}},{imperial:{precipTotal:51}},{imperial:{precipTotal:12}},{imperial:{precipTotal:22}},{imperial:{precipTotal:32}},{imperial:{precipTotal:42}},{imperial:{precipTotal:52}},{imperial:{precipTotal:13}},{imperial:{precipTotal:23}},{imperial:{precipTotal:33}},{imperial:{precipTotal:43}},{imperial:{precipTotal:53}},{imperial:{precipTotal:14}},{imperial:{precipTotal:24}},{imperial:{precipTotal:34}},{imperial:{precipTotal:44}},{imperial:{precipTotal:54}},{imperial:{precipTotal:15}},{imperial:{precipTotal:25}},{imperial:{precipTotal:35}},{imperial:{precipTotal:45}},{imperial:{precipTotal:55}},{imperial:{precipTotal:16}},{imperial:{precipTotal:26}},{imperial:{precipTotal:36}},{imperial:{precipTotal:46}},{imperial:{precipTotal:56}},{imperial:{precipTotal:17}},{imperial:{precipTotal:27}},{imperial:{precipTotal:37}},{imperial:{precipTotal:47}},{imperial:{precipTotal:57}},{imperial:{precipTotal:18}},{imperial:{precipTotal:28}},{imperial:{precipTotal:38}},{imperial:{precipTotal:48}},{imperial:{precipTotal:58}}];

const result = observations.slice(0, 32).map(o => o.imperial.precipTotal).reduce((acc, el) => acc + el) + ' in';

console.info(result);

slice(0, 32): берем первые 32 элемента (это не нужно, если вы берете все элементы массива)

map(o => o.imperial.precipTotal): сопоставьте каждый элемент массива со строкой precipTotal.

reduce((acc, el) => acc + el): просуммировать значения

Действительно помогло, спасибо!

JesseLikesWeather 31.08.2024 16:34

Другие вопросы по теме