如何在 Node.js 中获取数组的最后一个元素?

9
我是一名新手,对于node.js和JavaScript还不熟悉,所以这个问题可能很简单,但我无法解决。
我有许多项在一个数组中,但我只想得到最后一项。我尝试使用lodash,但它似乎没有给我提供数组的最后一项。
我的数组现在看起来像这样:
images : ['jpg.item_1', 'jpg.item_2', 'jpg.item_3', ..., 'jpg.item_n']

and i want to get:

images : 'jpg.item_n'

我正在使用lodash,结果如下:

images : ['g.item_1', 'g.item_2', 'g.item_n']

看起来我只获取了jpg的最后一个字母,即'g'。

我使用lodash编写的代码如下:

const _ = require('lodash');

return getEvents().then(rawEvents => {

  const eventsToBeInserted = rawEvents.map(event => {
    return {

      images: !!event.images ? event.images.map(image => _.last(image.url)) : []

    }
  })
})

3个回答

24
您的问题在于您正在map函数内使用 _.last。这将获得当前项中的最后一个字符。 您想要获取实际Array的最后一个元素。
您可以使用 pop() 来完成此操作,但应注意它是破坏性的(将从数组中删除最后一项)。
非破坏性的普通解决方案:
var arr = ['thing1', 'thing2'];
console.log(arr[arr.length-1]); // 'thing2'

或者使用lodash

_.last(event.images);

我明白了,那很有道理。但是当我想在eventsToBeInserted中获取结果时,该怎么做呢? - Benjamin Andersen
你可以执行 eventsTobeInserted.push(arr[arr.length-1]) - psilocybin

2
使用.pop()数组方法。

var images  =  ['jpg.item_1', 'jpg.item_2', 'jpg.item_3', 'jpg.item_n'];

var index= images.length - 1; //Last index of array
console.log(images[index]);

//or,

console.log(images.pop())// it will remove the last item from array


3
这将会移除该物品,所以他不应该这么做。 - NikxDa
@NikxDa 正确。我没有想到那个。谢谢你指出来。 - Ved

0

虽然 Array.prototype.pop 可以检索数组的最后一个元素,但它也从数组中移除了此元素。因此,应将 Array.prototype.popArray.prototype.slice 结合使用:

var images  =  ['jpg.item_1', 'jpg.item_2', 'jpg.item_3', 'jpg.item_n'];

console.log(images.slice(-1).pop());

对于这个踩票的评论有什么看法吗? :) - Dmitriy Simushev
我做了这个:images: !! event.images ? event.images.map(image => image.url.slice(-1).pop()) : [] 但现在我收到一个错误,说 TypeError: image.url.slice(...).pop is not a function。不确定这是什么意思? - Benjamin Andersen
@BjarkeAndersen,很可能是因为event.images数组的格式不正确。确保image.url也是一个数组。我已经为您准备了一个小的工作示例:https://jsfiddle.net/enzam28p/ - Dmitriy Simushev
感谢 @Dmitriy Simushev - Benjamin Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接