After 3 days I finally figured out the way of solving this problem. So the answers from @gazdagergo and @vich are completely right. It is just that I have a parent component as a container holding all the items that need to be added into the array, and all the items are rendered out inside a child component. I originally declared the array inside the child component, which then generate a new array each time I add an item into the array causing the array to be 'overwritten'.
To solve, instead of declaring the array inside the child component, I moved the array declaration into the parent component, which eventually solved the problem.