如何按条件过滤含嵌套对象的数组,筛选出status为online的服务项
错误原因
- 你错误使用了
Object.keys()方法:service.pm2_env.status本身就是字符串类型的状态值,不需要调用Object.keys()处理。Object.keys()的作用是接收一个对象作为入参,返回该对象所有可枚举属性的键名组成的数组,你传入字符串值会得到由字符串单字符索引组成的数组,比如Object.keys('online')返回["0","1","2","3","4","5"],这个数组和字符串'online'做全等判断永远返回false,所以过滤结果为空。
正确实现方案
直接读取service.pm2_env.status的属性值做判断即可,代码如下:
const statusList = [ { "pid": 0, "name": "dailyScripts.job", "pm2_env": { "namespace": "default", "kill_retry_time": 100, "windowsHide": true, "username": "u4011", "treekill": true, "status": "stopped" }, "pm_id": 0, "monit": { "memory": 0, "cpu": 0 } }, { "pid": 1, "name": "finn.job", "pm2_env": { "namespace": "default", "kill_retry_time": 100, "windowsHide": true, "username": "u3411", "treekill": true, "status": "online" }, "pm_id": 1, "monit": { "memory": 0, "cpu": 1 } } ] const data = statusList.filter(service => service.pm2_env.status === 'online'); console.log(data, 'data');
执行后会输出仅包含status为online的服务项数组,符合需求。
内容的提问来源于stack exchange,提问作者Akii J
相关产品推荐
相关产品推荐

