JS - JSON: добавление пары ключей в каждый объект путем вычисления разницы во времени сейчас и метки времени в объекте JSON

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

У меня есть массив JSON с объектами, как показано ниже:

var arrofobj = [{"id": 1, "timestamp":1545311087282},{"id": 2, "timestamp":1545311148254}];

Я хочу добавить пару ключей к каждому объекту в массиве с разницей между отметкой времени «сейчас» и отметкой времени, хранящейся в объектах JSON.

Будет ли он работать с оператором forEach(), где я могу сгенерировать новую пару ключей с помощью такого оператора, как: arrofobj.timestampdiff = (new Date().getTime() - arrofobj.timestamp)

Но я не знаю, как это сделать?

Кроме того, я хочу вычислить разницу в минутах сохраненных временных меток, и теперь, иногда сохраненная временная метка равна 0, тогда она также должна сообщать 0?

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
41
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать Array.forEach следующим образом

var arrofobj = [{"id": 1, "timestamp":1545311087282},{"id": 2, "timestamp":1545311148254}];
let now = new Date().getTime();
arrofobj.forEach(v => v.timestampdiff = now - v.timestamp);
console.info(arrofobj);

Спасибо всем, @ JO3-W3B-D3V, я не знал, что forEach добавляет к текущему массиву, но это то, что мне нужно сейчас, я буду использовать другие варианты для других случаев использования. Спасибо всем !

Jéan 20.12.2018 14:29

@ Jéan Я рада поделиться с тобой чем-то! :) Если вас не беспокоит изменение массива напрямую, то используйте forEach! :)

JO3-W3B-D3V 20.12.2018 14:33

Простой одинарный подход с карта

arrofobj.map(data=> ({...data, timestampdiff: new Date().getTime() - data.timestamp}))
Ответ принят как подходящий

Я знаю, что вы знаете о методе forEach, но при этом вы вносите изменения в исходный массив. Если вы хотите создать новую копию массива, вы можете использовать map. Затем, конечно, чтобы сделать «клоны» объектов в массиве, используя деструктуризация.

Редактировать

Я обновил его, чтобы он больше походил на ответ, который написал @Ashish, способ, которым я написал, вероятно, был больше «дружелюбный к новичкам», но этот способ так же хорош, и меньше кода для написания, что приятно.

const array = [{"id": 1,"timestamp": 1545311087282}, {"id": 2, "timestamp": 1545311148254}];
const now = new Date().getTime();

// New copy.
const newArray = array.map(o => ({...o, diff: now - o.timestamp}));

console.info(array);
console.info(newArray);

// Changes original. 
array.forEach(o => o.diff = now - o.timestamp);
console.info(array);

Редактировать 2

Вы можете поиграть с как, он определяет разницу за считанные минуты, но я предполагая, это то, чего вы пытаетесь достичь?

const array = [{"id": 1,"timestamp": 1545311087282}, {"id": 2, "timestamp": 1545311148254}];
const now = new Date().getTime();

// Difference in minutes.
const diff = time => new Date(now).getMinutes() - new Date(time).getMinutes();

// New copy.
const newArray = array.map(o => ({...o, minsDiff: diff(o.timestamp)}));

console.info(array);
console.info(newArray);

Спасибо @ JO3-W3B-D3V (извиняюсь, что задаю еще один вопрос), я пытаюсь изменить разницу в минутах, но `const newarr = arr.map (o => ({diff: (now - o.timestamp ) .getMinutes ()})); `не работает, там написано` TypeError: (теперь - o.timestamp) .getMinutes не является функцией `. Любые идеи?

Jéan 20.12.2018 15:02

@ Jéan Я немного изменился, чтобы проиллюстрировать, как ты мог это сделать.

JO3-W3B-D3V 20.12.2018 15:13

Ух ты, этот умный чувак! Функция высшего порядка как константа! Никогда не видел этого в действии! Спасибо!

Jéan 20.12.2018 16:58

@ Джин, ха-ха, я рада, что тебе понравилось! В этом нет ничего сложного, как видите, мне лично нравится писать свой JavaScript в функциональном стиле, потому что я просто ленив ... Ха-ха! :)

JO3-W3B-D3V 20.12.2018 17:00

Привет @ JO3-W3B-D3V, еще одна вещь ... (я приспособлю свой Q, чтобы отразить новое), иногда timestamp = 0, в некоторых случаях я не хочу, чтобы подсчет минут выполнялся, я пытаюсь принести if в вашу функцию, например `const diff = time => (if (time === 0) {0;} else {new Date (now) .getMinutes () - new Date (time) .getMinutes ()} ); `, но это не работает, как мне заставить это работать?

Jéan 20.12.2018 18:18

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