You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Underscore.js where操作符未按预期工作问题咨询

解决Underscore.js _.where 未按预期工作的问题

哎,我之前也碰到过Underscore.js的_.where抽风的情况,结合你给出的Spotify Track数据,咱们一步步排查问题哈!

首先得明确_.where的核心逻辑:它会遍历数组,返回所有完全匹配你传入的顶层键值对的对象。结合你的场景,常见的问题和解决办法如下:

1. 类型不匹配导致匹配失败

这是最容易踩的坑!比如你的track_number、disc_number都是数字类型,但如果你用字符串去匹配,就会完全找不到结果:

❌ 错误示例:

// 注意这里track_number是字符串"1",但实际数据里是数字1
_.where(album.tracks.items, { track_number: "1" });

✅ 正确做法:
确保匹配值的类型和数据里的一致:

_.where(album.tracks.items, { track_number: 1 });

可以先打印一条数据确认类型:

console.log(typeof album.tracks.items[0].track_number); // 正常应该输出"number"

2. 试图匹配嵌套属性(_.where做不到)

_.where只能处理顶层属性,如果你想匹配比如external_urls.spotify这种嵌套属性,直接用where会失效:

❌ 错误示例:

// 这样写完全找不到结果,因为where只会找顶层的external_urls属性等于整个对象的项
_.where(album.tracks.items, { external_urls: { spotify: "xxx" } });

✅ 正确做法:改用_.filter配合自定义判断函数:

_.filter(album.tracks.items, function(track) {
  return track.external_urls.spotify === "https://open.spotify.com/track/5dcQ8zP4ruXLGvxvnaqiIR";
});

3. 数据还没加载完成就调用_.where

如果你的album.tracks.items是通过异步请求(比如Spotify API)获取的,可能在调用_.where时,数据还没返回,此时数组是空的或者undefined,自然返回空结果。

✅ 解决办法:
确保在数据加载完成后再执行查询,比如放在API回调或者async/await的await之后:

// 假设用fetch请求Spotify API
fetch("你的Spotify API地址")
  .then(res => res.json())
  .then(album => {
    // 这里数据已经加载完成,再调用where
    const matchedTracks = _.where(album.tracks.items, { disc_number: 1 });
    console.log(matchedTracks);
  });

4. 属性名拼写错误

别笑,这真的是高频错误!比如把disc_number写成discNumber,或者track_number写成trackNum,导致完全匹配不到。

✅ 解决办法:
先打印一条数据确认属性名:

console.log(Object.keys(album.tracks.items[0]));
// 会输出所有顶层属性名,核对你要匹配的键名是否正确

测试用例

用你给出的那条track数据,咱们写个测试验证:

const tracks = [{ 
  "disc_number": 1, 
  "duration_ms": 220613, 
  "explicit": false, 
  "id": "5dcQ8zP4ruXLGvxvnaqiIR",
  "name": "It Ain't Love (feat. Lil Mo)",
  "track_number": 1
}];

// 正确匹配disc_number=1的项
const result = _.where(tracks, { disc_number: 1 });
console.log(result); // 会返回这条track对象

如果还是不行,你可以把你实际调用_.where的代码贴出来,咱们再进一步排查!

内容的提问来源于stack exchange,提问作者Ridhwaan Shakeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:34:36