首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在javascript (特别是旧的javascript中)动态设置或更改对象的属性名称

如何在javascript (特别是旧的javascript中)动态设置或更改对象的属性名称
EN

Stack Overflow用户
提问于 2019-08-22 21:27:26
回答 1查看 56关注 0票数 0

这个问题已经被问了很多次,并且已经回答了很多次,但是我仍然想知道是否有可能在浏览器之外动态地更改对象的属性名?

我有一个更大的问题,与此有关,但我已经总结了核心提出了一个现在。

代码语言:javascript
运行
复制
var arr = []
var a = "newAttributeName";
var obj2 = {"msg": "hello"};
arr.push({a: obj2});

console.log(JSON.stringify(arr));

在将obj2推到数组(arr)时,我需要动态地将属性名"a“(这是变量)更改为该变量的值。但这并没有发生。控制台中只有{"a":{"msg":"hello"}}。如何动态更改属性名,特别是在非浏览器上下文中,有什么诀窍吗?

===========================================================================好吧,我提出了一个更广泛的问题,这个问题就是这个问题的一部分。下面是工作代码,在属性dynamicName中,应该根据buildNested函数中第3参数的值进行更新。也许有人能找到解决或绕过这个问题的方法。

代码语言:javascript
运行
复制
var parentObj =  
    [
        {"clientid": 0, "name": "Mike"}, 
        {"clientid": 1, "name": "Alan"}, 
        {"clientid": 3, "name": "Peter"},
        {"clientid": 4, "name": "Anna"}
    ];

var childObj =  
    [
        {"address": "address info 1", "clientid": 0}, 
        {"address": "address info 2", "clientid": 1}, 
        {"address": "address info 3", "clientid": 4},
        {"address": "address info 4", "clientid": 3},
        {"address": "address info 5", "clientid": 3}
    ];


console.log(JSON.stringify(buildNested(parentObj, childObj, "givenName", "clientid")));


function buildNested(parentObj, childObj, dynamicName, matchId) {

    var nested = parentObj.reduce(function(acc, item) {
        acc.push(
            Object.assign({}, item,
                {
                    dynamicName_: buildObject(childObj, item, matchId)
                }
            )
        );
        return acc;
    }, []);

    // **** here is the circumvent-solution ****
    nested = JSON.stringify(nested);
    return nested.replace(new RegExp( dynamicName_, 'g' ), dynamicName);
    // ***************************************
}

function buildObject(childObj, parent, matchId) {
    var filtered = childObj.filter(function(x) {
        if (x[matchId] === parent[matchId]) {
            return x;
        }
    })  
    return filtered;
}
EN

回答 1

Stack Overflow用户

发布于 2019-08-22 21:28:07

使用方括号表示动态属性表示法(也称为计算的属性名称):

代码语言:javascript
运行
复制
arr.push({ [a]: obj2 });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57617265

复制
相关文章

相似问题

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