如何使用角度js中的键扩展对象?

时间:2017-05-03 14:43:27

标签: javascript angularjs

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

任何想法如何实现?

3 个答案:

答案 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;
&#13;
&#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()

&#13;
&#13;
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;
&#13;
&#13;

您应该在MDN.处查看Object.assign()上的文档。此方法的另一个好处是您的数据不会发生变异。在可能的情况下避免数据突变始终是一个优势。