使用键从数组对象提取指定数据却返回全部?如何仅输出genestart值
问题原因与解决办法
兄弟,你这个问题太常见啦——把赋值运算符和比较运算符搞混了!
看你代码里的这行:
if (attrName='genestart')
这里的=是赋值运算符,它会把字符串'genestart'赋值给attrName,然后这个赋值表达式的结果就是'genestart'本身。在JavaScript的布尔判断里,非空字符串属于"真值",所以这个if条件永远为真,自然所有属性的attrValue都被打印出来了,根本没起到筛选的作用。
修正方法
把赋值运算符=换成严格相等运算符===(推荐用严格相等,避免隐式类型转换带来的意外问题):
for (var i=0; i<genedata.matches.length;i++){ var arr = genedata.matches[i]; for (var key in arr){ var attrName=key; var attrValue = arr[key]; if (attrName === 'genestart'){ // 这里改成=== console.log(attrValue); } } }
额外优化建议
其实你完全不用遍历对象的所有键来查找genestart,直接通过属性名访问更简洁高效:
// 传统for循环写法 for (var i = 0; i < genedata.matches.length; i++) { var item = genedata.matches[i]; // 可选:判断属性存在再打印,避免输出undefined if ('genestart' in item) { console.log(item.genestart); } } // 更现代的forEach写法 genedata.matches.forEach(item => { if (item.genestart !== undefined) { console.log(item.genestart); } });
内容的提问来源于stack exchange,提问作者ApisMel
相关产品推荐
相关产品推荐

