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();
}
请注意key
被视为原样,但它应该是原始对象的parameter name
。
任何想法如何实现?
答案 0 :(得分:1)
您可以使用Object.keys
。请试试这个:
var myObj = {
person: "John",
age: "20"
};
var newObj = {};
angular.forEach(Object.keys(myObj), function (value, key) {
newObj[value] = myObj[value] + ' someValue';
});
console.log(newObj)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
答案 1 :(得分:1)
问题是key
被视为一个小句而不是表达式,您必须在解决方案中使用[key]
才能使其正常工作。
var myObj = {
person: 'John',
age: 20
};
const GetVal = () => 3;
var newObj = {};
angular.forEach(myObj,
function (value, key) {
_.extend(newObj, { [key]: value + GetVal() });
});
console.log(newObj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
否则,使用_.each(在_.extend中),您可以执行以下操作:
var new_obj = {};
_.each(obj, (v, k) => new_obj[k] = v + getVal())
var obj = {
person: "John",
age: "20"
};
const getVal = () => '_prefix';
var new_obj = {};
_.each(obj, (v, k) => new_obj[k] = v + getVal())
console.log(new_obj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
答案 2 :(得分:0)
您可以尝试这样Object.assign()
:
var myObj = {
person: "John",
age: "20"
};
function GetVal(val) {
return val;
}
myObj = Object.assign({}, myObj, {
person: myObj.person + GetVal(" Lastname"),
age: myObj.age + GetVal(" years old")
});
console.log(myObj);
&#13;
您应该在MDN.处查看Object.assign()上的文档。此方法的另一个好处是您的数据不会发生变异。在可能的情况下避免数据突变始终是一个优势。