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 的含义。听起来您想要分割一个包含所有空值的新数组,以及它后面的一个元素。但我不能回答这个问题,因为我不确定。
我正在尝试从最后一个 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 的含义。听起来您想要分割一个包含所有空值的新数组,以及它后面的一个元素。但我不能回答这个问题,因为我不确定。