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

如何使用jQuery筛选非空数组并通过extend进行合并?

我来帮你搞定这个问题!你现在的需求是合并多个对象,但要自动剔除那些值为空数组的属性,对吧?核心思路就是在合并前先过滤掉每个对象里的空数组项,这样最终的JSON就不会出现那些没用的空数组键了。

解决方案步骤

  1. 写一个过滤函数:遍历对象的所有属性,只保留非空数组(或非数组类型)的属性,移除值为空数组的属性。
  2. 用这个函数处理你要合并的每个对象(personarray、providerarray、researcherarray)。
  3. 再用$.extend合并处理后的对象,最后转成JSON字符串。

完整代码示例

首先定义过滤函数(两种写法,选你习惯的就行):

写法一:传统for循环(兼容旧环境)

function filterEmptyArrays(obj) {
  const filteredObj = {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      // 只有当值是数组且长度为0时才跳过,其他情况都保留
      if (!(Array.isArray(value) && value.length === 0)) {
        filteredObj[key] = value;
      }
    }
  }
  return filteredObj;
}

写法二:ES6+简洁版

function filterEmptyArrays(obj) {
  return Object.entries(obj).reduce((acc, [key, value]) => {
    if (!(Array.isArray(value) && value.length === 0)) {
      acc[key] = value;
    }
    return acc;
  }, {});
}

然后修改你的业务代码:

// 你的原有赋值逻辑不变
personarray['Person'] = person;
providerarray['Provider'] = provider;
researcherarray['Researcher'] = researcher;

// 1. 过滤每个对象中的空数组属性
const processedPerson = filterEmptyArrays(personarray);
const processedProvider = filterEmptyArrays(providerarray);
const processedResearcher = filterEmptyArrays(researcherarray);

// 2. 深拷贝合并过滤后的对象(第一个{}用来创建新对象,避免修改原数据)
const mergedResult = $.extend(true, {}, processedPerson, processedProvider, processedResearcher);

// 3. 转成JSON字符串
const dataStr = JSON.stringify(mergedResult);

如果要合并的对象很多,还可以用更简洁的批量处理方式:

// 把所有要合并的对象放进数组
const allObjects = [personarray, providerarray, researcherarray];

// 批量过滤 + 合并
const mergedResult = allObjects
  .map(obj => filterEmptyArrays(obj))
  .reduce((acc, currentObj) => $.extend(true, acc, currentObj), {});

const dataStr = JSON.stringify(mergedResult);

效果验证

当person是空数组时,processedPerson里会自动移除Person这个键,合并后的结果就不会出现"Person":[],正好符合你期望的输出:

{"Profile Id":1234,"Provider":[{"table name":"Provider","unique id":"0","field name":"ProSalary","field value":"$320,800"}],"Researcher":[{"table name":"Researcher","unique id":"0","field name":"ProSalary","field value":"$320,800"}]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:21