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

ECMAScript 5下使用filter函数按双条件过滤对象数组

实现方案

在ECMAScript 5环境下,你可以借助Array.prototype.indexOf()替代includes()完成存在性判断,结合filter()函数实现需求:

// 原数组
var originalArray = [
  {id: 1, level: 0, name: 'A'},
  {id: 2, level: 1, name: 'B'},
  {id: 3, level: 1, name: 'S'},
  {id: 4, level: 0, name: 'A'},
  {id: 5, level: 0, name: 'S'},
  {id: 6, level: 1, name: 'A'},
  {id: 7, level: 0, name: 'B'}
];

// 目标name集合
var targetNames = ['B', 'S'];

// 执行过滤
var filteredArray = originalArray.filter(function(item) {
  // 满足level为0,或name在targetNames数组中
  return item.level === 0 || targetNames.indexOf(item.name) !== -1;
});

console.log(filteredArray);

逻辑说明

  • filter()会遍历数组,仅保留回调函数返回true的元素
  • ES5中无includes()方法,用indexOf()判断元素是否存在:目标数组包含指定name时,indexOf()返回非负索引;不存在则返回-1,因此用!== -1确认元素存在
  • 过滤采用或条件:只要level等于0,或者name属于['B','S'],该元素就会被保留

执行代码后得到的结果与你期望一致:

[
  {id: 1, level: 0, name: 'A'},
  {id: 2, level: 1, name: 'B'},
  {id: 3, level: 1, name: 'S'},
  {id: 4, level: 0, name: 'A'},
  {id: 5, level: 0, name: 'S'},
  {id: 7, level: 0, name: 'B'}
]

内容的提问来源于stack exchange,提问作者Sebastien Chemouny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:42