angular.extend - 将变量作为键传递时出错

angular.extend - Error when passing a variable as a key

我有一个奇怪的问题,我无法解释。

我有以下代码:

if (groupsCtrl.groups[groupsCtrl.groupslug].members) {
   angular.extend(groupsCtrl.groups[groupsCtrl.groupslug].members, {[friend.key]: true});
} else {
   groupsCtrl.groups[groupsCtrl.groupslug].members = {[friend.key]: true};
}

该代码在 firefox 和 chrome 中运行良好。但是,当我 运行 它在 phone 上的移动 android 浏览器中时,我的整个网站崩溃了,只显示一条白线。我发现这是因为这条线:

angular.extend(groupsCtrl.groups[groupsCtrl.groupslug].members, {[friend.key]: true});

特别是 [friend.key] 是问题的根源。我想这是一个兼容性问题,有解决方法吗?这也不起作用:

var friendkey = friend.key;
angular.extend(groupsCtrl.groups[groupsCtrl.groupslug].members, {[friendkey]: true});

非常感谢!我还是个新手,很抱歉,如果这对您来说很明显,我也尝试搜索但不确定要搜索什么。

这是所有编程语言中的经验法则,您不能在创建对象时动态定义对象 属性 名称。 JSON、对象等 JavaScript 中应用了相同的规则

解决这个问题的最好方法是,先创建一个你想扩展的对象,然后再将它传递给扩展函数。动态创建对象 属性 的核心问题,您可以通过使用 bracket notation.

访问来设置对象键

代码

var tempObject = {}; //creating temp object
tempObject[friend.key] = true; //adding dynamic key with value.
if (groupsCtrl.groups[groupsCtrl.groupslug].members) {
   angular.extend(groupsCtrl.groups[groupsCtrl.groupslug].members, object);
} else {
   groupsCtrl.groups[groupsCtrl.groupslug].members = object;
}