Javascript 切片数组后 i + 1 个值

Javascript slice array after i + 1 value

我正在尝试从最后一个 null 值开始在 i + 1 处分割一个数组。

数组被排序为空值优先。

它应该是这样的:

[null, null, a, b, c] => [null, null, a, b]

[null, a, b, c] => [null, a, b]

[null, null] => [null, null]

我正在做类似的事情,但我不确定如何处理仅空数组。

let newArray: = [];

for (let i = 0; i < array.length; i++) {
  if (array[i] !== null) {
    newArray = array.slice(0, i + 1);
    i++;
  }
}

要删除数组中的空值,您可以尝试

     var arr = [null, null, a, b, c];
     var temp = arr.filter(i=>i?true:false);
     arr = temp;

您可以对下一个值的计数器进行闭包并过滤数组。

const
    slice = array => array.filter(
        (c => v => v === null || c && c--)
        (2)
    );

console.log(...slice([null, null, 'a', 'b', 'c', 'd', 'e'])); // [null, null, a, b]
console.log(...slice([null, null, 'a', 'b', 'c'])); // [null, null, a, b]
console.log(...slice([null, 'a', 'b', 'c'])); // [null, a, b]
console.log(...slice([null, null])); // [null, null]

您的代码中存在一些错误,可能会导致意外行为。

  • 因为在 for 循环头中有 i++,所以不需要将它包含在循环体中。
  • 由于slice的第二个参数是不包含的,根据你实际要切片的测试条件i + 2;

完整代码:

function slice(array) {
    for (let i = 0; i < array.length; i++) {
        if (array[i] !== null) return array.slice(0, i + 2);
    }
    return array;
}

console.log(slice([null, null, 'a', 'b', 'c'])); // => [null, null, a, b]
console.log(slice([null, 'a', 'b', 'c'])); // => [null, a, b]
console.log(slice([null, null])); // => [null, null]

在我看来,从你的例子来看,你只需要切出一个数组而没有数组的最后一个元素。您想将第一个包含空值 a、b 和 c 的数组更改为另一个包含相同空值 a 和 b 的数组。

[null, null, a, b, c] => [null, null, a, b]

那么如果是这样的话,为什么不直接弹出数组。

let arr = [null, null, a, b, c];
arr.pop();

arr 现在是 [null, null, a, b];

对于只应删除非空值的特殊情况,如果它包含所有空值,则返回相同的数组,您可以弹出、检查,如果为空,则再次推回原始数组。

let arr = [null, null, a, b, c];
if(arr.pop() === null) arr.push(null);

仅此而已!

请您阐明 i + 1 的含义。听起来您想要分割一个包含所有空值的新数组,以及它后面的一个元素。但我不能回答这个问题,因为我不确定。