提问人:code-8 提问时间:4/16/2019 最后编辑:code-8 更新时间:4/16/2019 访问量:795
如何从 JS 对象中获取前 5 个属性?
How can I get top 5 properties from a JS object?
问:
我有一个JS对象。我只尝试前 5 个值
console.log(Object.keys(uniqVisitorDeviceType),Object.values(uniqVisitorDeviceType));
我得到了
(27) ["iPhone", "Windows NT 6.1", "Windows NT 10.0", "Macintosh", "iPad", "Windows NT 6.2", "Windows NT 6.3", "X11", "compatible", "Windows NT 5.1", "Linux", "Windows", "TweetmemeBot/4.0", ") { :", "Windows NT 6.0", "User-Agent,Mozilla/5.0 ", "KHTML, like Gecko", "Unknown", "Android", "Android 7.1.1", "Android 7.1.2", "Windows NT x.y", "Windows NT 6.1) AppleWebKit/537.36 ", "Windows NT 5.0", "Windows NT 8.0", "web crawler :: robots.txt exclude elefent", "Windows NT"]
(27) [198, 2197, 2381, 1271, 11, 46, 81, 417, 1752, 87, 225, 70, 8, 14, 6, 1, 6, 9, 1, 1, 2, 2, 7, 1, 1, 1, 1]
如何获取 5 个值的订单?次序?
-2381
-2197
-1752
-1271
-417
-225
-198
....
console.log(JSON.stringify(uniqVisitorDeviceType));
产生这个
{"iPhone":198,"Windows NT 6.1":2198,"Windows NT 10.0":2381,"Macintosh":1271,"iPad":11,"Windows NT 6.2":46,"Windows NT 6.3":81,"X11":417,"compatible":1752,"Windows NT 5.1":87,"Linux":225,"Windows":70,"TweetmemeBot/4.0":8,") { :":14,"Windows NT 6.0":6,"User-Agent,Mozilla/5.0 ":1,"KHTML, like Gecko":6,"Unknown":9,"Android":1,"Android 7.1.1":1,"Android 7.1.2":2,"Windows NT x.y":2,"Windows NT 6.1) AppleWebKit/537.36 ":7,"Windows NT 5.0":1,"Windows NT 8.0":1,"web crawler :: robots.txt exclude elefent":1,"Windows NT":1}
答:
2赞
Maheer Ali
4/16/2019
#1
您可以使用 Object 值的有序列表。然后使用 get top 元素。sort()
slice(0,n)
n
let obj = {"iPhone":198,"Windows NT 6.1":2198,"Windows NT 10.0":2381,"Macintosh":1271,"iPad":11,"Windows NT 6.2":46,"Windows NT 6.3":81,"X11":417,"compatible":1752,"Windows NT 5.1":87,"Linux":225,"Windows":70,"TweetmemeBot/4.0":8,") { :":14,"Windows NT 6.0":6,"User-Agent,Mozilla/5.0 ":1,"KHTML, like Gecko":6,"Unknown":9,"Android":1,"Android 7.1.1":1,"Android 7.1.2":2,"Windows NT x.y":2,"Windows NT 6.1) AppleWebKit/537.36 ":7,"Windows NT 5.0":1,"Windows NT 8.0":1,"web crawler :: robots.txt exclude elefent":1,"Windows NT":1}
let res = Object.values(obj).sort((a,b) => b-a).slice(0,5);
console.log(res)
评论
0赞
code-8
4/16/2019
我的不是一个数组,而是一个对象。你能调整你的答案以适应吗?
0赞
code-8
4/16/2019
我把它添加到了我的帖子中。
0赞
Maheer Ali
4/16/2019
@kyo 你能不能加上前五名的预期产量。你想要什么数字或钥匙?
2赞
Zeyad Etman
4/16/2019
#2
这将有助于:
const obj = {"iPhone":198,"Windows NT 6.1":2198,"Windows NT 10.0":2381,"Macintosh":1271,"iPad":11,"Windows NT 6.2":46,"Windows NT 6.3":81,"X11":417,"compatible":1752,"Windows NT 5.1":87,"Linux":225,"Windows":70,"TweetmemeBot/4.0":8,") { :":14,"Windows NT 6.0":6,"User-Agent,Mozilla/5.0 ":1,"KHTML, like Gecko":6,"Unknown":9,"Android":1,"Android 7.1.1":1,"Android 7.1.2":2,"Windows NT x.y":2,"Windows NT 6.1) AppleWebKit/537.36 ":7,"Windows NT 5.0":1,"Windows NT 8.0":1,"web crawler :: robots.txt exclude elefent":1,"Windows NT":1};
const top5Values = Object.values(obj).sort((a,b) =>b-a).slice(0,5);
const top5Keys = Object.keys(obj).sort((a,b) => obj[b]- obj[a]).slice(0,5);
console.log(top5Keys, top5Values)
评论
1赞
code-8
4/16/2019
有趣的答案。谢谢 👍🏼
1赞
AKX
4/16/2019
#3
你可以使用
Object.entries()
要从数据中获取字符串/数字对,- 使用自定义比较函数对它们进行排序,该函数可查看对中的数字
- 用于将内容限制在前 5 名
.slice(0, 5)
返回值是一个由 2 个数组组成的数组。
const data = {
"iPhone": 198,
"Windows NT 6.1": 2198,
"Windows NT 10.0": 2381,
"Macintosh": 1271,
"iPad": 11,
"X11": 417,
"compatible": 1752,
// ... snip ...
};
const top5 = Object.entries(data).sort((a, b) => b[1] - a[1]).slice(0, 5);
console.log(top5);
输出
[ [ 'Windows NT 10.0', 2381 ],
[ 'Windows NT 6.1', 2198 ],
[ 'compatible', 1752 ],
[ 'Macintosh', 1271 ],
[ 'X11', 417 ] ]
评论
console.log(JSON.stringify(uniqVisitorDeviceType))
)console.log(JSON.stringify(uniqVisitorDeviceType));