如何遍历角度js对象,并将对象添加到循环

时间:2015-12-11 14:56:41

标签: javascript arrays angularjs for-loop

我试图在angular-js中循环一个对象并向对象foreach循环对象添加一个数组,我的代码如下所示但似乎无法正常工作

vm.patients= [
        {[ {"p1": "value1"} ]},
        {[ {"p1": "value1"} ]},
        {[ {"p1": "value1"} ]}

    }];

for(var i=0; i < vm.patients.length; i++){
vm.patients[i].concat([{"z1": "z2",}]);`
}

我的目标是为每个循环添加{"z1": "z2",},即3个循环数组,以便我以下面结束

vm.patients= [
            {[ {"p1": "value1"},{"z1": "z2",} ]},
            {[ {"p1": "value1"},{"z1": "z2",} ]},
            {[ {"p1": "value1"},{"z1": "z2",} ]}

        }];
然而

concat似乎不起作用,任何解决方案?

4 个答案:

答案 0 :(得分:5)

如果对象不是类似于数组的对象,则不要使用for(;;)循环迭代对象。

您可以使用for(in)进行迭代,但是:

for(var key in yourObj) {
    if (obj.hasOwnProperty(key)) {
        var value = yourObj[key];
        //your code here
    }
}

或者angularjs-fashion:

angular.forEach(yourObj, function(value, key) {
    // your code here
})

此外:

vm.patients[i].concat([{"z1": "z2",}]);

是错误的,因为你正在调用像#34; patient1&#34; .concat([{&#34; z1&#34;:&#34; z2&#34;}])这样的内容:

  1. 不会改变该值。尝试在控制台中执行以下代码:

     var x = "a";
     x.concat("b");
     console.log(x);
    
  2. 听起来不对。尝试在控制台中执行以下操作:

     var x = "a";
     console.log(x.concat([{'a':'b'}]))
    

    看看会发生什么。

  3. 提示:如果您的代码遇到问题,请尝试将单个指令和作业中的所有代码分开。

    也许你打算:

    var yourObj = {
        "p1": {"name": "patient1"},
        ... others ...
    };
    angular.forEach(yourObj, function(value, key) {
        // your code here
        angular.extend(value, {"z1": "z2"})
    })
    

答案 1 :(得分:1)

这是你想要完成的吗?

var vm = {};
vm.patients = [{
        "p1": "value1",
        "p2": "value2",
        "p3": "value3"
    }];

for(var i=0; i < vm.patients.length; i++){
    var p = vm.patients[i];
    p["z1"] = "z2";
}
// The result here is that each element in the array will have an
// addition attribute named z1 with the value of "z2".

您的JavaScript存在一些语法问题,但此代码更清晰。

我将patients放入数组并修改了影响数组中项目更改的其他代码。

答案 2 :(得分:1)

concat是一个Array函数,你不能在一个对象上使用它。其次,如果你想使用concat,第二个参数也应该是一个数组:[1].concat([2,4])。 第三,你试图将某些东西连接到一个不能与对象连接的字符串。 然后, 如果你想迭代对象并扩展它,你应该这样做:

Object.keys(obj).forEach(function(ob) {
  obj[ob] = Object.assign(obj[ob], {newParam1: 1, newParam2: 2});
});

但你用角度编码这更合适:

angular.forEach(obj, function(v) {
  v = angular.extend(v, {newValue1: 1, newValue2: 2});
});

答案 3 :(得分:1)

假设您有一个像

这样的数据结构
vm.patients = [{ p1: "value1" }, { p1: "value1" }, { p1: "value1" }];

然后这会起作用:

var vm = {};
vm.patients = [{ p1: "value1" }, { p1: "value1" }, { p1: "value1" }];

vm.patients.forEach(function (a) {
    a.z1 = 'z2';
});

document.write('<pre>' + JSON.stringify(vm.patients, 0, 4) + '</pre>');