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

同一变量显示不同值排查:JS中receivedOrderKey结果异常

问题分析:为什么receivedOrderKey全是undefined?

我来帮你揪出问题所在~你这段代码里藏了一个很容易踩的小坑:

你先声明了var receivedOrderKey = [];,但紧接着又用var receivedOrderKey = Object.keys(columnsDataList).map(...)重新赋值了这个变量!

map方法的特性是会返回一个新数组,数组长度和原数组完全一致,每个元素对应回调函数的返回值。你的回调函数里,只有当值不为null时才执行push操作,但回调函数本身没有返回任何内容(默认返回undefined)。所以map遍历原对象的5个键时,每次迭代都返回undefined,最后这个满是undefined的新数组就覆盖了你之前初始化的空数组——这就是console.log显示5个undefined的原因。

修复方法有两种,看你偏好哪种:

方法1:改用forEach(贴合你原本的写法逻辑)

把map换成forEach就好,因为forEach只负责遍历执行回调,不会返回新数组,也就不会覆盖你初始化的数组:

var columnsDataList = { "checkbox": null, "status": "status3", "invoiceId": null, "invoiceDate": "invoiceDate6", "type": "type4" }; 
console.log(columnsDataList); 
var receivedOrderKey = []; 
Object.keys(columnsDataList).forEach(function(key) { 
  var checkNull = columnsDataList[key]; 
  if (checkNull != null) { 
    receivedOrderKey.push(key); 
    console.log(receivedOrderKey) 
  } 
}); 
console.log("it's coming blank here", receivedOrderKey); // 输出:["status", "invoiceDate", "type"]

方法2:用filter更简洁(推荐)

既然你要过滤出值不为null的键,直接用filter一步到位,不需要额外的push操作:

var columnsDataList = { "checkbox": null, "status": "status3", "invoiceId": null, "invoiceDate": "invoiceDate6", "type": "type4" }; 
console.log(columnsDataList); 
var receivedOrderKey = Object.keys(columnsDataList).filter(function(key) {
  return columnsDataList[key] != null;
});
console.log("it's coming blank here", receivedOrderKey); // 输出:["status", "invoiceDate", "type"]

这样就能得到你预期的非null键数组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:17