JS 数组中非空元素的最后一个索引



我有一个数组,里面有定义的和空值,如下所示:

var arr = [
  {...},
  null,
  null,
  {...},
  null
];

有什么方法可以从这个数组中获取最后一个非空元素的索引?我的意思是不必完全循环

您可以使用

while循环并从末尾迭代。

var array = [{ foo: 0 }, null, null, { bar: 42 }, null],
    index = array.length;
    
while (index-- && !array[index]);
console.log(index);
console.log(array[index]);

过滤非空值获取最后一个的值,如果需要索引从值中获取索引。但要求值是唯一的。

// Last non-null value
const lastNonNull = arr.filter(x => x).pop();
// Index of last non-null
const indexOfLastNonNull = arr.indexOf(lastNonNull);
-

-编辑(1(

您可能希望使用数组reduce方法,但在运行之前reverse确保序列从最后一个到第一个。 reduce工作得很好,第一个初始值是null然后我们检查result哪个是第一个初始值,所以我们传递cur数组的第一个元素,如果它是真实的,我们返回idx哪个是数组的索引,如果不是,我们返回null它将成为下一个循环中的result

arr.reduce((result, cur, idx) => (result ? result : (cur ? idx : null)), null)
-

-编辑(2(

或者,您可以reverse数组并像这样运行indexOf

arr.indexOf(null);

对于运行arr.reverse()后反转,它将反转数组的内容。无需返回任何东西。

const reverse = arr => {
    let cpy = [...arr];
    cpy.reverse();
    return cpy;
};
const nonNullIndex = arr => {
    let res = arr.length - 1 - reverse(arr).findIndex(e => e !== null)
    return res === arr.length ? -1 : res;
};

这应该有效。reverse函数返回一个数组,因为Array.prototype.reverse就地反转它,不返回任何内容。

nonNullIndex函数返回最后一个不为 null 的索引。由于它会反转数组,因此必须从数组长度中减去找到的索引。使用 1 的减法,以便它返回正确的值(因为数组的索引为 0(。

如果结果等于长度(意味着 findIndex 返回 -1(,则返回 -1,这意味着数组中没有空值。否则,它将返回结果。

试试这个:

array.length - array.slice(0).reverse().findIndex(function (el) { return el }) - 1;

您可以使用 map 函数遍历数组,检查条件并返回索引,然后获取最大索引:

Math.max.apply(null, arr.map(function (v, i) { return v !== null && i; });

Math.max(...arr.map((v, i) => v !== null && i));

相关内容

  • 没有找到相关文章

最新更新