javascript - 如何在 javascript 中动态设置或更改对象的属性名称(尤其是在较旧的 javascript 中)

标签 javascript arrays object

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

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

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 函数中第三个参数的值进行更新。也许有人找到解决或规避问题的方法。

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;
}

最佳答案

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

arr.push({ [a]: obj2 });

关于javascript - 如何在 javascript 中动态设置或更改对象的属性名称(尤其是在较旧的 javascript 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617265/

相关文章:

java - 返回 Java 数组中的第 n 个短词

javascript - 根据每个数组内的值对对象内的数组进行排序

java - 在java中使用对象函数

javascript - Ajax PHP 脚本未运行

javascript - 传单中带有 geoJson 文件的 Font Awesome 图标

MySQL条件过滤json数组中的元素

ruby-on-rails - 如何在 Ruby On Rails 中获取数组值

javascript - 获取对象数组中所有指定元素的总和

javascript - 如何隐藏错误信息?

javascript - 使用 Clojure 向 JavaScript 添加语法