Javascript 如何使用angular js中的键扩展对象?
Javascript 如何使用angular js中的键扩展对象?,javascript,angularjs,Javascript,Angularjs,myObj是一个包含一些参数的对象 myObj: { person: "John", age: "20" }; 现在,我需要创建一个与原始对象类似的新对象(仅对值进行轻微更改),类似于 newObj: { person: "John" + GetVal(); age: "20" + GetVal(); }; 我试过这样的方法: var newObj = {}; angular.forEach(myObj,
myObj
是一个包含一些参数的对象
myObj:
{
person: "John",
age: "20"
};
现在,我需要创建一个与原始对象类似的新对象(仅对值进行轻微更改),类似于
newObj:
{
person: "John" + GetVal();
age: "20" + GetVal();
};
我试过这样的方法:
var newObj = {};
angular.forEach(myObj,
function (value, key) {
_.extend(newObj, { key: value + GetVal() });
});
但这会产生类似的结果
newObj:
{
key: "John" + GetVal();
}
但我在等一件东西
newObj:
{
person: "John" + GetVal();
}
请注意,键
被视为这样,但它应该是原始对象的参数名
有什么想法可以实现吗?你可以使用
对象键。请试试这个:
var myObj={
人物:“约翰”,
年龄:“20”
};
var newObj={};
angular.forEach(对象.键(myObj)),函数(值,键){
newObj[value]=myObj[value]+'someValue';
});
console.log(newObj)
您可以使用对象.key
。请试试这个:
var myObj={
人物:“约翰”,
年龄:“20”
};
var newObj={};
angular.forEach(对象.键(myObj)),函数(值,键){
newObj[value]=myObj[value]+'someValue';
});
console.log(newObj)
您可以像这样尝试Object.assign()
:
var myObj={
人物:“约翰”,
年龄:“20”
};
函数GetVal(val){
返回val;
}
myObj=Object.assign({},myObj{
person:myObj.person+GetVal(“姓氏”),
年龄:myObj.age+GetVal(“岁”)
});
console.log(myObj)
您可以像这样尝试Object.assign()
:
var myObj={
人物:“约翰”,
年龄:“20”
};
函数GetVal(val){
返回val;
}
myObj=Object.assign({},myObj{
person:myObj.person+GetVal(“姓氏”),
年龄:myObj.age+GetVal(“岁”)
});
console.log(myObj)
问题是键
被视为一个普通的表达式,而不是一个表达式,您必须在解决方案中使用[key]
,以使其正常工作
var myObj={
人物:“约翰”,
年龄:20
};
常量GetVal=()=>3;
var newObj={};
棱角的。forEach(myObj,
功能(值、键){
_.extend(newObj,{[key]:value+GetVal()});
});
console.log(newObj)
问题是键
被视为一个普通的表达式,而不是一个表达式,您必须在解决方案中使用[key]
var myObj={
人物:“约翰”,
年龄:20
};
常量GetVal=()=>3;
var newObj={};
棱角的。forEach(myObj,
功能(值、键){
_.extend(newObj,{[key]:value+GetVal()});
});
console.log(newObj)
您的意思是newObj[key]=myObj[value]+GetVal()
?否,Object.keys返回一个数组,其中的项是对象键名称,您需要这些值,因此它应该是value
。如果您在这种情况下使用键
,它将为您提供数组索引(0,1..)很好的答案。谢谢你的详细解释。理解,尝试,工作得很好:)幸福…有疑问。使用.extend
和简单地使用newObj[value]=oldObj[value]
有什么区别。如果一个属性不存在,这两个属性似乎都会创建一个名为value
的新属性。.extend
是“下划线”库方法,它将源对象中的所有属性简单地复制到目标对象上(有关详细信息,请查看下划线文档:下划线js.org/#extend)。因此,如果您希望在不进行修改的情况下复制整个对象,这将非常有用。在您的例子中,不需要使用它,因为您使用forEach
逐个循环对象属性,并使用它们来构建新对象。您不需要复制对象,而是基于另一个对象属性创建新对象,并且不需要任何库来在JS中添加对象属性:)您的意思是newObj[key]=myObj[value]+GetVal()
?不,object.keys返回一个数组,其中的项是对象键名称,您需要这些值,因此它应该是value
。如果您在这种情况下使用键
,它将为您提供数组索引(0,1..)很好的答案。谢谢你的详细解释。理解,尝试,工作得很好:)幸福…有疑问。使用.extend
和简单地使用newObj[value]=oldObj[value]
有什么区别。如果一个属性不存在,这两个属性似乎都会创建一个名为value
的新属性。.extend
是“下划线”库方法,它将源对象中的所有属性简单地复制到目标对象上(有关详细信息,请查看下划线文档:下划线js.org/#extend)。因此,如果您希望在不进行修改的情况下复制整个对象,这将非常有用。在您的例子中,不需要使用它,因为您使用forEach
逐个循环对象属性,并使用它们来构建新对象。您不需要复制对象,而是基于另一个对象属性创建新对象,并且不需要任何库来在JS中添加对象属性:)为什么不直接执行newObj.person=“John”+GetVal()代码>?我不知道myObj
的确切属性名称。它可能是任何东西。我想要的是一个相似的对象,每个属性的值都被修改代码>?我不知道myObj
的确切属性名称。它可能是任何东西。我想要的是一个相似的对象,每个属性的值都被修改。问题是我不知道myObj
的属性名。它可能是任何东西。因此,您不能像上面那样对人:
和年龄
进行硬编码。很抱歉,我没有看到您的问题中提到了动态键名。一定要使用Object.keys()来获取这些密钥。另一方面,angular.forEach的性能远不如简单的for循环。问题是我不知道myObj
的属性名。它可能是任何东西。所以,你不能像上面那样硬编码人:
和年龄