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

使用every()检测所有对象是否含指定属性的异常问题排查

问题分析与解决

错误原因

你的代码里有两个核心问题导致every返回false:

  1. Object.keys(source)返回的是数组:Target的Object.keys结果是['last'](数组类型),虽然单独检测时obj[0].hasOwnProperty(key)能临时工作(因为hasOwnProperty会自动将参数转为字符串,数组['last']转字符串后是'last'),但逻辑不严谨,且在every回调里的对象用错了。
  2. every回调的对象错误:回调里的obj是传入的整个数组,而不是数组中的单个元素。你应该用回调的第一个参数(数组的每一项)来调用hasOwnProperty。

修正后的代码

如果Target只有一个属性,可直接取第一个key:

function Find(obj, source) {
  const key = Object.keys(source)[0]; // 取出单个key字符串
  const result = obj.every(item => item.hasOwnProperty(key));
  console.log(result); // 输出true
}

// 调用测试
Find(MyObject, Target);

如果要兼容Target有多个属性的情况(检测数组中每个对象是否包含所有Target的属性),可以这样写:

function Find(obj, source) {
  const keys = Object.keys(source);
  const result = obj.every(item => {
    return keys.every(key => item.hasOwnProperty(key));
  });
  console.log(result);
}

验证

调用修正后的函数,传入你的MyObject和Target,会输出预期的true——因为两个对象都拥有last属性,即使第二个对象的last值为null,也不影响属性是否存在的判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:35:37