Я хочу сохранить дополнительную пару ключей в каждом объекте массива JSON с рассчитанным временем.
У меня есть массив JSON с объектами, как показано ниже:
var arrofobj = [{"id": 1, "timestamp":1545311087282},{"id": 2, "timestamp":1545311148254}];
Я хочу добавить пару ключей к каждому объекту в массиве с разницей между отметкой времени «сейчас» и отметкой времени, хранящейся в объектах JSON.
Будет ли он работать с оператором forEach(), где я могу сгенерировать новую пару ключей с помощью такого оператора, как:
arrofobj.timestampdiff = (new Date().getTime() - arrofobj.timestamp)
Но я не знаю, как это сделать?
Кроме того, я хочу вычислить разницу в минутах сохраненных временных меток, и теперь, иногда сохраненная временная метка равна 0, тогда она также должна сообщать 0?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать 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);@ Jéan Я рада поделиться с тобой чем-то! :) Если вас не беспокоит изменение массива напрямую, то используйте forEach! :)
Простой одинарный подход с карта
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);Вы можете поиграть с как, он определяет разницу за считанные минуты, но я предполагая, это то, чего вы пытаетесь достичь?
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 Я немного изменился, чтобы проиллюстрировать, как ты мог это сделать.
Ух ты, этот умный чувак! Функция высшего порядка как константа! Никогда не видел этого в действии! Спасибо!
@ Джин, ха-ха, я рада, что тебе понравилось! В этом нет ничего сложного, как видите, мне лично нравится писать свой JavaScript в функциональном стиле, потому что я просто ленив ... Ха-ха! :)
Привет @ JO3-W3B-D3V, еще одна вещь ... (я приспособлю свой Q, чтобы отразить новое), иногда timestamp = 0, в некоторых случаях я не хочу, чтобы подсчет минут выполнялся, я пытаюсь принести if в вашу функцию, например `const diff = time => (if (time === 0) {0;} else {new Date (now) .getMinutes () - new Date (time) .getMinutes ()} ); `, но это не работает, как мне заставить это работать?
Спасибо всем, @ JO3-W3B-D3V, я не знал, что forEach добавляет к текущему массиву, но это то, что мне нужно сейчас, я буду использовать другие варианты для других случаев использования. Спасибо всем !