我试图在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
似乎不起作用,任何解决方案?
答案 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;}])这样的内容:
不会改变该值。尝试在控制台中执行以下代码:
var x = "a";
x.concat("b");
console.log(x);
听起来不对。尝试在控制台中执行以下操作:
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"})
})
答案 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>');