is there a rule which explains why some methods are modifying original arrays (like splice, push, etc) and other creates new array (like slice, map, concat, etc)?
Nope, there is no rule specifying which array methods will modify the callee array or which will return a new array.
They are simple functions, having their own behavior, you just have to remember their behaviors and you always have the web to lookup stuff.