首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在map函数中添加字段时出现"object is not extensible“错误

尝试在map函数中添加字段时出现"object is not extensible“错误
EN

Stack Overflow用户
提问于 2018-02-28 12:37:43
回答 4查看 16.2K关注 0票数 6

我正在尝试使用map将新字段添加到数组中的项:

代码语言:javascript
复制
const newArray = oldArray.map(item => {
    return (item.newField = 'Something');
});

我试过了:

代码语言:javascript
复制
const newArray = oldArray.map(item => {
    item.newField = 'Something';
    return item;
});

然而,我得到一个错误:

代码语言:javascript
复制
TypeError: Cannot add property newField, object is not extensible
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-28 12:44:43

最有可能的情况是,对象被标记为不可扩展,并且您正在运行严格模式。

看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cant

当调用Object.preventExtensions(obj)方法时,您会得到错误。

代码语言:javascript
复制
'use strict';

var obj = {};
Object.preventExtensions(obj);

obj.x = 'foo';

您将看到错误Uncaught TypeError: Cannot add property x, object is not extensible

票数 1
EN

Stack Overflow用户

发布于 2018-02-28 12:43:56

代码语言:javascript
复制
const newArray = oldArray.map(item => {
  return Object.assign({}, item, { newField: 'Something' });
});
票数 2
EN

Stack Overflow用户

发布于 2020-01-21 14:07:53

您可以按如下方式使用对象扩散(es6功能):

代码语言:javascript
复制
const newArray = oldArray.map(item => {
    // { ...item } creates a new object and spreads all of "item" items
    // into it. We can then assign a "newField" or overwrite "newField" 
    // if it already exists on "item"
    return { ...item, newField: 'something' };
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49022068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档