【发布时间】:2018-03-27 23:15:43
【问题描述】:
这是album.tracks.items的json内容
[{
"disc_number": 1,
"duration_ms": 220613,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/5dcQ8zP4ruXLGvxvnaqiIR"
},
"href": "https://api.spotify.com/v1/tracks/5dcQ8zP4ruXLGvxvnaqiIR",
"id": "5dcQ8zP4ruXLGvxvnaqiIR",
"is_local": false,
"name": "It Ain't Love (feat. Lil Mo)",
"preview_url": "https://p.scdn.co/mp3-preview/b0b7c4631088cf6c358f3fd2f368621064c81169?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 1,
"type": "track",
"uri": "spotify:track:5dcQ8zP4ruXLGvxvnaqiIR",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/1"
},
{
"disc_number": 1,
"duration_ms": 206173,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/3skhDoiKAW73vulWCRsWjW"
},
"href": "https://api.spotify.com/v1/tracks/3skhDoiKAW73vulWCRsWjW",
"id": "3skhDoiKAW73vulWCRsWjW",
"is_local": false,
"name": "1000 Cigarettes",
"preview_url": "https://p.scdn.co/mp3-preview/157a6131e35c16519ef2a2b306523fc5c5f54dc0?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 2,
"type": "track",
"uri": "spotify:track:3skhDoiKAW73vulWCRsWjW",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/2"
},
{
"disc_number": 1,
"duration_ms": 171226,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/0u33BbRnsU2TCZyJaQ1NH3"
},
"href": "https://api.spotify.com/v1/tracks/0u33BbRnsU2TCZyJaQ1NH3",
"id": "0u33BbRnsU2TCZyJaQ1NH3",
"is_local": false,
"name": "Bounce (feat. Nore and Isis)",
"preview_url": "https://p.scdn.co/mp3-preview/2379a2e8849111c4a2faa1abddf273ba51711584?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 3,
"type": "track",
"uri": "spotify:track:0u33BbRnsU2TCZyJaQ1NH3",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/3"
},
{
"disc_number": 1,
"duration_ms": 219333,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/2REmc7SO87Ex6MtPQPafLl"
},
"href": "https://api.spotify.com/v1/tracks/2REmc7SO87Ex6MtPQPafLl",
"id": "2REmc7SO87Ex6MtPQPafLl",
"is_local": false,
"name": "Vuvuvu",
"preview_url": "https://p.scdn.co/mp3-preview/c996b13cf701175ce75d2a1ba4f1f8d54ff1b090?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 4,
"type": "track",
"uri": "spotify:track:2REmc7SO87Ex6MtPQPafLl",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/4"
},
{
"disc_number": 1,
"duration_ms": 192853,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/7d5Rp5q6XUegGhrIxEXja4"
},
"href": "https://api.spotify.com/v1/tracks/7d5Rp5q6XUegGhrIxEXja4",
"id": "7d5Rp5q6XUegGhrIxEXja4",
"is_local": false,
"name": "Heartbreaker",
"preview_url": "https://p.scdn.co/mp3-preview/5f280fbebded1b2ce5320e43f75ac32628ccae00?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 5,
"type": "track",
"uri": "spotify:track:7d5Rp5q6XUegGhrIxEXja4",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/5"
},
{
"disc_number": 1,
"duration_ms": 243840,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/07r3G29bZvODU5Lr0Nk6IZ"
},
"href": "https://api.spotify.com/v1/tracks/07r3G29bZvODU5Lr0Nk6IZ",
"id": "07r3G29bZvODU5Lr0Nk6IZ",
"is_local": false,
"name": "Fist Of God",
"preview_url": "https://p.scdn.co/mp3-preview/9453101e1568b713b0af6c1da4cfabd5d6664f03?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 6,
"type": "track",
"uri": "spotify:track:07r3G29bZvODU5Lr0Nk6IZ",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/6"
},
{
"disc_number": 1,
"duration_ms": 206880,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/66ZmwiF97Zk11pz5Jyfbwr"
},
"href": "https://api.spotify.com/v1/tracks/66ZmwiF97Zk11pz5Jyfbwr",
"id": "66ZmwiF97Zk11pz5Jyfbwr",
"is_local": false,
"name": "So Deep (feat. Jahmal of The Carps)",
"preview_url": "https://p.scdn.co/mp3-preview/6b62f7c210d42b266ac39064d90adf842db33465?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 7,
"type": "track",
"uri": "spotify:track:66ZmwiF97Zk11pz5Jyfbwr",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/7"
},
{
"disc_number": 1,
"duration_ms": 208133,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/4syNWEL0JzzybCfZ9MZHPv"
},
"href": "https://api.spotify.com/v1/tracks/4syNWEL0JzzybCfZ9MZHPv",
"id": "4syNWEL0JzzybCfZ9MZHPv",
"is_local": false,
"name": "Click Click (feat. E-40)",
"preview_url": "https://p.scdn.co/mp3-preview/62b6d3becb7fdabf6d0d706cf2ef273bdc477754?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 8,
"type": "track",
"uri": "spotify:track:4syNWEL0JzzybCfZ9MZHPv",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/8"
},
{
"disc_number": 1,
"duration_ms": 231040,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/5oBKd1jkmrZ6h9FbvdIzDS"
},
"href": "https://api.spotify.com/v1/tracks/5oBKd1jkmrZ6h9FbvdIzDS",
"id": "5oBKd1jkmrZ6h9FbvdIzDS",
"is_local": false,
"name": "Word Up (feat. Ghostface Killah)",
"preview_url": "https://p.scdn.co/mp3-preview/20d1b61b80ded729248f58cfbab178f92b17004a?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 9,
"type": "track",
"uri": "spotify:track:5oBKd1jkmrZ6h9FbvdIzDS",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/9"
},
{
"disc_number": 1,
"duration_ms": 218453,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/6RsIWxNzE82KdYztIT1IK1"
},
"href": "https://api.spotify.com/v1/tracks/6RsIWxNzE82KdYztIT1IK1",
"id": "6RsIWxNzE82KdYztIT1IK1",
"is_local": false,
"name": "Breakaway (feat. Jahmal of The Carps)",
"preview_url": "https://p.scdn.co/mp3-preview/8ea8912ae9bad9936090cee3ad85614142782d2c?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 10,
"type": "track",
"uri": "spotify:track:6RsIWxNzE82KdYztIT1IK1",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/10"
},
{
"disc_number": 1,
"duration_ms": 191560,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/2RYqwivWy9seoylZt6qUmH"
},
"href": "https://api.spotify.com/v1/tracks/2RYqwivWy9seoylZt6qUmH",
"id": "2RYqwivWy9seoylZt6qUmH",
"is_local": false,
"name": "1000 Cigarettes (feat. Freeway)",
"preview_url": "https://p.scdn.co/mp3-preview/0d38c708b8605d60fdaa386c790fe3a7be4cb0e1?cid=774b29d4f13844c495f206cafdad9c86",
"track_number": 11,
"type": "track",
"uri": "spotify:track:2RYqwivWy9seoylZt6qUmH",
"url_path": "http://localhost:5000/music/4tnnrgXBrdF0b4q3lZqL0v/1/11"
}
]
我正在尝试根据 disc_number 为 1 和 track_number 为 4(第四个元素)的两个条件在上面的 json 数组中获取一个元素req.params.disc_number: 1, req.params.track_number: 4
var _ = require('underscore');
...
var track = _.where(album.tracks.items, {disc_number: req.params.disc_number, track_number: req.params.track_number});
console.log('track: ' + track)
track 什么都不返回([console] track:),但它应该返回第四个元素(这个):
{ disc_number: 1,
duration_ms: 293600,
explicit: false,
external_urls:
{ spotify: 'https://open.spotify.com/track/616NBqU3gbjICFB1npf2vg' },
href: 'https://api.spotify.com/v1/tracks/616NBqU3gbjICFB1npf2vg',
id: '616NBqU3gbjICFB1npf2vg',
is_local: false,
name: 'Twilight Galaxy',
preview_url: null,
track_number: 4,
type: 'track',
uri: 'spotify:track:616NBqU3gbjICFB1npf2vg'}
当我通过disc_number 和track_number 时,我认为我不需要parseInt()。 _where 操作员以前在我有一个条件时工作过
不知道怎么回事
编辑 1:我在从代码中复制 json 时修正了错字(现在有效),但它仍然无法正常工作
【问题讨论】:
-
好吧,问题中的“数据”格式不正确 - 修复了这个问题,(酌情添加
},)代码工作得很好 - 而且,问题中没有 JSON ... 一次你(或一些“内部”函数)拥有JSON.parsed JSON,它不再是 JSON,它只是普通的 ol'javascript 对象——这也很好,因为_.where在做它的事情之前不会解析 JSON 跨度> -
TL;DR - 你有一个简单的错字
-
我修复了 json 错字,但仍然无法正常工作
-
嗯,确实如此 - 看到下面的答案了吗?这是你的代码,正在运行
-
在创建这个简单的函数
const where = (a, m) => a.find(i => Object.entries(m).every(([k, v]) => i[k] == v));后,尝试使用where(......而不是_.where(.....,(如果您希望在哪里返回所有匹配项,请将 find 更改为过滤器)这也应该有效 - 如果没有不行,那么album.tracks.items不是你说的那样——或者request.params.track_number不是你认为的那样?
标签: javascript underscore.js where