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

JavaScript实现filter过滤查询时动态切换判断键名

核心问题

用obj.xxx的点语法访问对象属性时,点后面的内容会被当成固定的字符串键名,不会解析成变量。你写的data[i].var1实际是在找对象里键名就叫var1的属性,但你的数据里根本没有这个键,判断逻辑自然失效。
动态指定键名访问属性,必须用方括号语法:obj[存储键名的变量]。

基础修正版本

改完的代码直接换filterKey的值就能切换过滤的字段,不用改循环里的判断逻辑:

// 要过滤0和null值的键,改这个变量即可
const filterKey = 'year';

const data = [
  {"location": 30, "year": 2019},
  {"location": 60, "year" : 1928},
  {"location": 0, "year": 2019},
  {"location": 50, "year": 0}
];

const filteredData = [];
for (let i = 0; i < data.length; i++) {
  const item = data[i];
  // 方括号里放变量,就能拿到对应键的值
  if (item[filterKey] !== null && item[filterKey] != 0) {
    // 直接push原对象即可,不用手动逐键复制
    filteredData.push(item);
  }
}
console.log(filteredData);
扩展:支持同时过滤多个键

如果需要同时校验多个字段(比如location和year都不能是0或null),可以把待过滤的键存成数组,用Array.prototype.filter+every写得更简洁:

// 所有需要过滤0和null的键都放这个数组里,按需增删
const filterKeys = ['location', 'year'];

const data = [
  {"location": 30, "year": 2019},
  {"location": 60, "year" : 1928},
  {"location": 0, "year": 2019},
  {"location": 50, "year": 0}
];

const filteredData = data.filter(item => {
  // 所有待校验键都满足「不是null、不是0」才保留条目
  return filterKeys.every(key => item[key] !== null && item[key] != 0);
});

console.log(filteredData);
// 最终只会保留location、year都符合要求的前两条数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:30:55