为何Object.values(obj).includes('test1')返回false?'test1'是'test1w'的子串
问题原因和解决办法
嘿,这事儿其实是因为 Array.prototype.includes() 的工作方式和你想的不一样——它只会找数组里完全一模一样的元素,不会去检查元素里是不是包含某个子串哦。
咱们一步步拆解你的代码:
- 执行
Object.values(obj)后,会把对象的所有值提取成数组,也就是["test1w", "test2"] - 接着调用
includes("test1"),它会挨个对比数组里的每个元素:- 第一个元素是
"test1w",和"test1"显然不是完全相等的 - 第二个元素
"test2"就更不用说了,完全不沾边
所以最后exist自然是false。
- 第一个元素是
如果你的需求是检查对象里有没有某个值包含"test1"这个子串,那得换个方法——用 Array.prototype.some() 配合字符串的 includes() 就行:
var obj = { "a": "test1w", "b": "test2" }; let exist = Object.values(obj).some(val => val.includes("test1")); console.log(exist); // 这时候就会输出 true 啦
这里的逻辑很简单:some() 会遍历数组里的每个值,对每个值用字符串的 includes() 检查是否包含"test1",只要有一个值满足,some() 就直接返回 true,完全符合你的需求。
内容的提问来源于stack exchange,提问作者coldhands
相关产品推荐
相关产品推荐

