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

Map方法设置item.checked后返回异常:数组元素类型不符预期

问题:修改数组对象的checked属性后返回结果不符合预期

需求是遍历tableSchema.headers数组,将每个元素的checked属性设为false(不存在则赋值为false),且返回数组长度与原数组一致,但当前代码执行后,最后一个元素变成了true,而非预期的带checked: false的对象。

我的代码

const headerUpdate = this.tableSchema.headers.map((item) => {
   return (item.checked ?? (item.checked = false)) || item;
});

返回结果

[{…}, {…}, {…}, {…}, true]

示例数据

headers: [
        {
            title: 'Primary Admin User ID',
            label: 'adminUserName',
            sortable: true,
            dir: true,
            sortType: 'string',
            sortActive: true,
        },
        {
            title: 'Name',
            label: 'customerName',
            sortable: true,
            sortType: 'string',
            dir: false,
        },
        {
            title: 'Address',
            label: 'address',
            sortable: true,
            link: false,
            dir: false,
            sortType: 'string',
            disabled: true,
        },
        {
            title: 'Phone Number',
            label: 'phoneNum',
            sortable: true,
            link: false,
            dir: false,
            sortType: 'string',
            disabled: true,
        },
        {
            label: 'CheckBox',
            link: false,
            dir: false,
            sortType: 'string',
            disabled: true,
            checkBox: true,
            checked: false,
        },
    ],

问题原因

你的代码逻辑存在错误,核心问题出在返回的表达式(item.checked ?? (item.checked = false)) || item上:

  • 当元素原本的checked为true时,item.checked ?? (item.checked = false)会直接返回true,而逻辑或||会优先返回第一个真值,所以最终返回的是布尔值true,而非修改后的对象。
  • 只有当checked不存在或为undefined时,表达式才会执行赋值并返回对象,但完全覆盖不了checked为true的场景。

解决方案

方案1:直接修改原数组对象(允许修改原数据)

const headerUpdate = this.tableSchema.headers.map((item) => {
  // 不管原来有没有checked属性,直接设为false
  item.checked = false;
  return item;
});

方案2:返回新对象(不修改原数组数据,推荐)

如果不想改动原数组里的对象,用扩展运算符创建新对象并覆盖checked属性:

const headerUpdate = this.tableSchema.headers.map((item) => {
  return { ...item, checked: false };
});

这两种方案都能保证返回数组的长度和原数组一致,且每个元素的checked属性都被设为false。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:25:39