Javascript 如何通过在JS中将消息分组来推送到子阵列?
我不确定该如何命名这个问题,但我会尽力解释我的问题。目前,我有一个PHP数组,其中包含一些条目Javascript 如何通过在JS中将消息分组来推送到子阵列?,javascript,php,jquery,Javascript,Php,Jquery,我不确定该如何命名这个问题,但我会尽力解释我的问题。目前,我有一个PHP数组,其中包含一些条目 Array ( [0] => stdClass Object ( [sender_id] => 0 [message] => Test [created_at] => 2020-03-12 16:26:23 ) [1] => stdClass Obje
Array
(
[0] => stdClass Object
(
[sender_id] => 0
[message] => Test
[created_at] => 2020-03-12 16:26:23
)
[1] => stdClass Object
(
[sender_id] => 0
[message] => Hello
[created_at] => 2020-03-12 13:47:47
)
)
我需要的是一种方法,通过创建的_在日期对每个条目进行分组,以便我的结果如下所示:
Array
(
[2020-03-12] => Array
(
[0] => stdClass Object
(
[sender_id] => 0
[message] => Test
[created_at] => 2020-03-12 16:26:23
)
[1] => stdClass Object
(
[sender_id] => 0
[message] => Hello
[created_at] => 2020-03-12 13:47:47
)
)
)
为了实现这一点,我使用PHP完成了以下工作:
$grouped = [];
foreach ( $messages as $message ) {
$created_at_date = date( 'Y-m-d', strtotime( $message->created_at ) );
$grouped[ $created_at_date ][] = $message;
}
但是现在我遇到了一个问题,所以我决定用JS来完成这个任务。首先,我用PHP对数组进行了编码,并将其设置为
标记中的一个变量:
<script>
let messages = <?= ! empty( $messages ) ? json_encode( $messages ) : '[]' ?>;
</script>
我想你缺少的是:
jQuery( messages ).each( function ( index, message ) {
let createdAtDate = new Date( message["created_at"] ).toLocaleDateString( navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
} );
if(typeof groupedMessages[createdAtDate] === 'undefined'){
groupedMessages[createdAtDate] = [];
}
groupedMessages[createdAtDate].push(message);
} );
看@Barmar这让我很困惑。我不明白其中的逻辑:/JavaScript没有使用赋值到
[]
来推送到数组上,这只是在PHP中。JS使用了.push()
方法。[完美!非常简单……但我擅长PHP,还不是JS,谢谢你的帮助!