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

JavaScript如何从数组中排除非指定项并修改对应字段名称与值

正确实现代码

const obj = {
  myProduct: [
    { name: "PRODUCT_PRICE", value: "234.324" },
    { name: "PRODUCT_NAME", value: "Insurance" },
    { name: "PRODUCT_TYPE", value: "Life" },
    { name: "PRODUCT_TERM", value: "Long" },
    { name: "PRODUCT_ID", value: "AP3232343JKD" },
    { name: "PRODUCT_ENABLED", value: "TRUE" },
  ],
};

// 补充预期需要保留的两个属性到白名单
const allowedNames = [
  'PRODUCT_NAME',
  'PRODUCT_TYPE',
  'PRODUCT_TERM',
  'PRODUCT_ID',
  'PRODUCT_ENABLED'
];

const updateCertainProperties = {
  PRODUCT_ID: "app.productID",
  PRODUCT_ENABLED: "app.product.enabled"
};

const productName = "testProduct_3234dfasfdk3msldf23";

// 先筛选保留项,再批量修改属性
const processed = obj.myProduct
  .filter(item => allowedNames.includes(item.name))
  .map(item => {
    const res = { ...item };
    // 替换匹配的name
    if (updateCertainProperties[res.name]) res.name = updateCertainProperties[res.name];
    // 修改产品名
    if (res.name === 'PRODUCT_NAME') res.value = productName;
    return res;
  });

console.log(processed);

运行上述代码输出结果和你给出的预期完全一致。

原代码问题汇总

  • filter方法不会修改原数组,你调用后没有接收返回值,筛选逻辑完全不生效
  • 在map回调中直接返回整个obj.myProduct数组,最终得到的是一个长度和原数组一致、每个元素都是原数组的嵌套结构,逻辑完全错误
  • 初始的allowedNames白名单漏掉了预期输出里要保留的PRODUCT_NAME和PRODUCT_ENABLED,筛选后会丢失这两项
  • 直接修改原数组的元素属性,会污染原始数据,建议拷贝后修改新对象避免副作用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:03