JS中如何快速获取JSON对象的最后一项的值?

比方说有这么一个JSON对象:

{ 
VdKYUwJK0LX7PjH7AAAB: 'VdKYUwJK0LX7PjH7AAAB',
'52dPDsI8bAJIuVzoAAAC': '52dPDsI8bAJIuVzoAAAC',
QJlU5mYDPXDTXA5vAAAD: 'QJlU5mYDPXDTXA5vAAAD' 
}

我想在不知道最后一项K的情况下获取到末尾项的值,请问怎么做?

阅读 20.1k
11 个回答

没办法,Key-Value数据结构是无法保证其顺序的,不管是 for...in 还是其它任何迭代方法,若你真保证数据有效性,还是使用 Array 吧。

一个获取的写法:

data[Object.keys(data)[Object.keys(data).length - 1]]

获取到最后一个key,再根据key取值

var lastkey="";
var jsonobj={ 
VdKYUwJK0LX7PjH7AAAB: 'VdKYUwJK0LX7PjH7AAAB',
'52dPDsI8bAJIuVzoAAAC': '52dPDsI8bAJIuVzoAAAC',
QJlU5mYDPXDTXA5vAAAD: 'QJlU5mYDPXDTXA5vAAAD' 
}
for (var keyname in jsonobj){
     
    lastkey=keyname;
}
alert (lastkey);

let obj = {
  VdKYUwJK0LX7PjH7AAAB1: 'VdKYUwJK0LX7PjH7AAAB2',
  '52dPDsI8bAJIuVzoAAAC1': '52dPDsI8bAJIuVzoAAAC2',
  QJlU5mYDPXDTXA5vAAAD1: 'QJlU5mYDPXDTXA5vAAAD2'
}

let lastIndex = Object.keys(obj).filter((cur, index, arr) => {
  return index === (arr.length - 1)
})[0]

console.log(obj[lastIndex] === 'QJlU5mYDPXDTXA5vAAAD2') // true

来试试这个

[].slice.call(Object.values(obj),this.length-1)+''

JSON对象是无序的
所以,如果键名不能指定排序,是没有最后一项的概念,因为连手动排序的依据都没有
比如

{
    'Y':123,
    'A':234,
    'G':345
}

这种情况下我们不指定一种排序方法(根据ASCII从大到小or从小到大),最后一项是G还是Y呢?我们看到的是G,但是console的时候最后一位是Y(chrome、firefox下浏览器根据键名字符从小到大排序)。

解决思路
1.提供键名排序依据,如不能则跳至6
2.Object.keys(jsonobj)取出键名数组
3.根据排序依据对数组进行排序
4.根据数组最后一位取出对应数据。

6.JSON对象换成数组

对象格式理论上是无序的,不能保证在不同环境下的遍历顺序,建议使用数组。
当然折中的方案是,约定要最后一项的key或传输数据里带上。

至于遍历对象,不考虑兼容性的情况下请使用Object.keys()先将对象转为数组再进行操作,这是标准推荐的做法。
考虑到旧浏览器的兼容的话可以for(..in..)。

对象是无序的 如果非要的可以使用object.keys获取对象key值的数组 再去取值

经过测试发现,Firefox 55.0.3和chrome 61.0.3163.79版本的JSON顺序是不会变的,在QQ浏览器chrome53内核下可能会根据首字母的顺序发生变化。

json数据没有顺序,无法获取最后一项数据

console.log(arr[Object.keys(arr)[Object.keys(arr).length-1]])

涨知识了,这个问题好棒棒~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏