Add one to the last array element The task

is taken from leetcode


  Given a non-empty array of digits representing a non-negative integer,
  plus one to the integer.
  
  The digits are stored such that the most significant digit is at the
  head of the list, and each element in the array contain a single
  digit.
  
  You may assume the integer does not contain any leading zero, except
  the number 0 itself.
  
  Example 1:
  
  Input: [1,2,3]
  
  Output: [1,2,4]
  
  Explanation: The array represents the integer 123.
  
  Example 2:
  
  Input: [4,3,2,1]
  
  Output: [4,3,2,2]
  
  Explanation: The array represents the integer 4321.


My solution

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
  let i = digits.length;
  let carry = 1;
  let tmp;
  const res = [];
  while(i &gt; 0 || carry) {
    tmp = (--i &gt;= 0 ? digits[i] : 0) + carry;
    carry = tmp / 10 | 0;
    res.unshift(tmp % 10);
  }
  return res;
};
It looks like your logic is fine, but I don't find it very readable. I guess it would be fine if you could clearly explain your logic in a tech interview, but here's how I'd write it just to be more clear. 

Use a for loop (that's what they're for!), modify the digits array in place unless they specify you shouldn't, and you can return as soon as you don't have anything left to carry.

var plusOne = function(digits){
    let carry=1;

    for(let i=digits.length-1; i&gt;=0; i--){
        let digitSum = carry + digits[i];
        if(digitSum &gt;= 10){
            digits[i] = digitSum%10;
        }
        else{
            digits[i] = digitSum;
            return digits;
        }
    }

    if(carry == 1){
        digits.unshift(1);
    }
    return digits;
}