这个问题已经被问了很多次,并且已经回答了很多次,但是我仍然想知道是否有可能在浏览器之外动态地更改对象的属性名?
我有一个更大的问题,与此有关,但我已经总结了核心提出了一个现在。
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参数的值进行更新。也许有人能找到解决或绕过这个问题的方法。
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;
}发布于 2019-08-22 21:28:07
使用方括号表示动态属性表示法(也称为计算的属性名称):
arr.push({ [a]: obj2 });https://stackoverflow.com/questions/57617265
复制相似问题