如何过滤cryptoData对象数组,仅保留含DISPLAY属性的元素
原代码存在的问题
- 错误使用filter回调参数:
Array.prototype.filter的回调函数第一个参数el是当前遍历到的数组元素本身,不是索引,原代码用cryptoData[el]属于完全误用,相当于把对象作为数组下标取值,永远无法得到预期结果。 - 判断逻辑错误:需求是判断元素是否包含
DISPLAY属性,原代码写的=== 'DISPLAY'是判断取值等于字符串DISPLAY,和需求完全不符。 - 变量名拼写错误:
filterdArray拼写错误,正确拼写为filteredArray。
正确实现
ES5 兼容写法
var filteredArray = cryptoData.filter(function (el) { // 判断当前元素自身是否存在DISPLAY属性 return el.hasOwnProperty('DISPLAY'); }); this.setState({ cryptos: filteredArray, refreshing: false });
ES6 简写写法
const filteredArray = cryptoData.filter(el => el.hasOwnProperty('DISPLAY')); this.setState({ cryptos: filteredArray, refreshing: false });
补充说明:如果不需要严格判断是元素自身属性(排除原型链继承的属性),也可以简写为
return 'DISPLAY' in el,大多数场景下效果一致。
内容的提问来源于stack exchange,提问作者Frank Boccia
相关产品推荐
相关产品推荐

