【问题标题】:how to loop over angular js object , and add object to the looped如何循环 Angular js 对象,并将对象添加到循环中
【发布时间】:2016-03-17 12:45:32
【问题描述】:

我试图在 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 但是似乎不起作用,有什么解决方案吗?

【问题讨论】:

  • vm.patients 不是数组。你需要使用方括号[ ] 来定义一个数组
  • 你将一个对象连接到字符串你期望什么?
  • patients 没有长度属性
  • Patients 是一个对象而不是一个数组。如果你想迭代它,你应该使用for in 循环。但是,无法预测或保证迭代属性的顺序。
  • 你知道你有一个奇怪的重音符号吗? ...({"z1": "z2",});`

标签: javascript arrays angularjs for-loop


【解决方案1】:

如果对象不是类似数组的对象,则不要使用 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",}]);

是错误的,因为您正在调用类似 "patient1".concat([{"z1": "z2"}]) 的东西:

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

     var x = "a";
     x.concat("b");
     console.log(x);
    
  2. 听起来是错误的。尝试在控制台中执行以下命令:

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

    看看会发生什么。

提示:如果您的代码有问题,请尝试将所有代码分成单个指令和分配。

也许你打算:

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

【讨论】:

  • 虽然问题不清楚,但答案仍不清楚。
【解决方案2】:

这是你想要完成的吗?

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 制作成一个数组,并修改了您的其他代码,这些代码会影响数组中项目的更改。

【讨论】:

  • 这看起来很有希望让我测试一下!
【解决方案3】:

concat 是一个数组函数,你不能在对象上使用它。其次,如果你想使用 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});
});

【讨论】:

  • v 代表什么?
  • 数组中的对象实例
【解决方案4】:

假设你有一个像

这样的数据结构
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>');

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2017-06-11
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2015-07-03
    相关资源
    最近更新 更多