在Javascript中"修剪"数组的更短/更好的答案?

Jas*_*eOT 4 javascript arrays

我遇到了一个问题来修剪一个数组的前0和后0(所有元素都是0-9),例如,

  • 对于输入[0, 1, 0, 2, 0],输出应该是[1, 0, 2]

  • 对于输入[1, 0, 2],输出应该是[1, 0, 2]

  • 对于输入[0, 1, 0, 2, 0, 0],输出应该是[1, 0, 2]

基本思想是找到第一个非零数的索引和非零索引的最后一个索引,并拼接原始数组.

我的方法是将数组更改为字符串并修剪它,然后再次更改回数组. trimArray=A=>A.join('').replace(/(^['0']*)|(['0']*$)/g, '').split('').map(a=>a-'0')

还有其他想法吗?

Mic*_*xon 9

我们可以使用数组方法来做到这一点......

var a = [0, 1, 0, 2, 0, 0];
while(a[0] === 0) {
    a.shift();
}

while(a[a.length - 1] === 0) {
    a.pop();
}
console.log(a)
Run Code Online (Sandbox Code Playgroud)

如果你需要保持原始数组完整:( https://jsfiddle.net/4q0un1kp/)

function trimZeros(arr)
{
    var result = [...arr];
    while(result[0] === 0) {
        result.shift();
    }

    while(result[result.length - 1] === 0) {
        result.pop();
    }
    return result;
}

var a =  [0, 1, 0, 2, 0, 0];
var b = trimZeros(a);

alert(a);
alert(b);
Run Code Online (Sandbox Code Playgroud)