这个问题已经被问过并回答过很多次了,但我仍然想知道是否可以在浏览器之外动态更改对象的属性名称?
我有一个与此相关的更大问题,但我已经总结了现在提出的核心问题。
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/