Я столкнулся с проблемой сопоставления значений в массиве объектов JS. Позволь мне привести пример,
var dynamicObjectArray = [
{Id: 1422859025, FromTime: "2023-02-12T19:00:00Z", ToTime: "2023-02-12T20:00:00Z"},
{Id: 1422859027, FromTime: "2023-02-12T18:00:00Z", ToTime: "2023-02-12T19:00:00Z"}
]
Мне нужно найти все идентификаторы для FromTime или ToTime, соответствующие "2023-02-12T19:00:00Z"
Используя базу данных, это можно сделать легко. Но здесь мне нужно воспроизвести массив из 100 объектов максимум. Кроме того, данные будут динамическими. Не могли бы вы предложить мне способ достижения цели с помощью NodeJS.
Если вы хотите получить предложение, вы можете сделать что-то вроде этого:
Создайте функцию, которая принимает в качестве параметра желаемую дату
Создайте переменную, содержащую массив, в котором вы сохраните все те «идентификаторы», которые соответствуют вашему условию.
Создайте цикл for
Создайте условие if, которое соответствует следующему условию:
Вот реализация кода:
function filterObjByDate(TO_MATCH_DATE) {
let ids = [];
for (let i = 0; i < dynamicObjectArray.length; i++) {
if (
dynamicObjectArray[i].FromTime === TO_MATCH_DATE ||
dynamicObjectArray[i].ToTime === TO_MATCH_DATE
) {
ids.push(dynamicObjectArray[i].Id);
}
}
return ids
}
Вот и все. Если у вас есть еще вопросы, спросите меня 😀👍
Вы можете использовать встроенный конструктор JS Date для сравнения дат вместо прямого использования строки.
Отфильтруйте подходящие объекты и сопоставьте идентификаторы.
Вы можете сделать что-то вроде этого.
const dynamicObjectArray = [{
Id: 1422859025,
FromTime: "2023-02-12T19:00:00Z",
ToTime: "2023-02-12T20:00:00Z"
},
{
Id: 1422859027,
FromTime: "2023-02-12T18:00:00Z",
ToTime: "2023-02-12T19:00:00Z"
}
];
const matchTime = new Date("2023-02-12T19:00:00Z").getTime();
const matchIds = dynamicObjectArray.filter(obj => {
const fromTime = new Date(obj.FromTime).getTime();
const toTime = new Date(obj.ToTime).getTime();
return matchTime === fromTime || matchTime === toTime;
}).map(obj => obj.Id);
console.info(matchIds);
Не могли бы вы показать код?