【问题标题】:What's the idiomatic way to get the last element from a generated array?从生成的数组中获取最后一个元素的惯用方法是什么?
【发布时间】:2021-06-09 07:38:47
【问题描述】:

我想在一行中从生成的数组中获取最后一个元素,有更好的方法吗?

我正在考虑将数组分配给foo,然后立即将foo 的最后一个元素再次分配给它自己,但它不起作用:

function* getArray() {
  yield* [1, 2, 3];
}

let foo = (foo = [...getArray()], foo[foo.length - 1]);

console.log(foo); // 3?

这可行,但它调用了两次getArray(),这是完全没有必要的。

function* getArray() {
  yield* [1, 2, 3];
}

let foo = [...getArray()][[...getArray()].length - 1];

console.log(foo); // 3

【问题讨论】:

  • 使用.at(-1).at(-2)等,这里也提到了:Get the last item in an array。使用这个polyfill。我建议在添加之前检查该方法的存在。或者,.slice(-1)[0].slice(-2)[0] 等是惯用的。
  • 将整个生成器存储在内存中只是为了拉出最后一个元素是次优的
  • @SebastianSimon:在最新的javascript中,这就像for(x of iter) {}; return x一样简单

标签: javascript one-liner


【解决方案1】:

你可以.pop()

pop() 方法从数组中删除最后一个元素并返回该元素。

function* getArray() {
  yield* [1, 2, 3];
}

let foo = [...getArray()].pop()
console.log(foo); // 3

let bar = [...getArray()].slice(-2)[0]
console.log(bar); // 2

let baz = [...getArray()].splice(-2, 1)[0]
console.log(baz); // 2

【讨论】:

  • 哦...我现在感觉自己像个白痴...非常感谢!但是我关于一个任意的索引?比如倒数第二个?
  • 让 foo = [...getArray()][1] ?
  • .slice(-2)[0] 如果你想倒数第二并且不知道长度
  • 啊,我明白了,为什么我没有这样想。再次感谢您!
【解决方案2】:

这是在单个语句中执行此操作的一种方法:

[...getArray()].reverse()[0]

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2011-04-10
    • 2014-03-03
    • 1970-01-01
    • 2015-05-11
    • 2011-04-09
    • 2014-01-26
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多