【问题标题】:Javascript slice array after i + 1 valuei + 1 值后的 Javascript 切片数组
【发布时间】:2021-11-18 12:22:52
【问题描述】:

我正在尝试从最后一个 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++;
  }
}

【问题讨论】:

  • 数组后面的其他null 值呢?

标签: javascript arrays slice


【解决方案1】:

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

  • 由于您在 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]

【讨论】:

    【解决方案2】:

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

    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]

    【讨论】:

      【解决方案3】:

      在我看来,从你的例子中,你只需要切出一个没有数组最后一个元素的数组。您想将第一个包含空值 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 是什么意思。听起来您想对一个新数组进行切片,其中包含所有空值以及其后的一个元素。但我无法回答,因为我不确定。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-11-24
          • 2012-11-10
          • 2020-08-07
          • 2015-08-25
          • 1970-01-01
          • 2021-12-29
          • 1970-01-01
          • 2012-05-06
          • 2017-10-04
          相关资源
          最近更新 更多