我需要将对象发送到api。但我需要在循环的每一步中更改对象的一个值。
taskWithFid
我希望[
{ RowId: 1 },
{ RowId: 2 },
{ RowId: 3 },
{ RowId: 4 },
{ RowId: 5 }
]
数组如下:
[
{ RowId: 5 },
{ RowId: 5 },
{ RowId: 5 },
{ RowId: 5 },
{ RowId: 5 }
]
但我明白了:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<link rel="stylesheet" href="style.css">
<script data-semver="1.2.13" src="http://code.angularjs.org/1.2.13/angular.js" data-require="angular.js@1.2.x"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MainCtrl as item">
<h1>Hello Plunker!</h1
<div>{{item.taskWithFid}}</div>
</body>
</html>
你能帮帮我吗?
{{1}}
答案 0 :(得分:1)
问题是你正在将同一个对象推入一个数组中,而这样做是为了改变它的RowId。所以最后,当你把它改为5时,所有都是5.你需要创建单独的对象:
fids.map (function(fid) {
taskWithFid.push({RowId: fid});
}.bind(this));
答案 1 :(得分:0)
应该是:
this.task = {
RowId: 0
};
var taskWithFid = [];
var fids = [1,2,3,4,5];
fids.map(function(fid){
var taskTemp = {};
taskTemp.RowId = fid;
taskWithFid.push(taskTemp);
}.bind(this));
移动并将var taskTemp = this.task;
更改为var taskTemp = {};
答案 2 :(得分:0)
var taskWithFid = [];
var fids = [1,2,3,4,5];
var taskTemp
fids.map(function(fid){
this.task = {
RowId: 0
};
taskTemp =this.task;
taskTemp.RowId = fid;
taskWithFid.push(taskTemp);
}.bind(this));
console.log(taskWithFid);
答案 3 :(得分:0)
每次更改this.task
RowId
都会被覆盖
将task
置于.map
内,新变量为var task { // code }
,因此每次都会创建新变量。
fid.map()应该像:
fids.map(function(fid){
var task = {
DateCreated: now.toJSON(),
RowId: 0,
Subject: null
};
task.RowId = fid
this.taskWithFid.push(task);
console.log('fid: '+fid);
}.bind(this));
答案 4 :(得分:0)
这是正确的理由
在Javascript中,对象和数组是通过引用推送的。不将对象和数组作为副本推送。
在您的代码中,当您执行以下行时,您只需将对象引用推送到数组。
taskTemp.RowId = fid;
taskWithFid.push(taskTemp);
最后,由于此引用,最后一个值正在更改所有值。
解决方案
我们只需要在每次推送时创建一个单独的对象。大多数答案都是正确的。但仍然是我的解决方案:
fids.map(function(fid){
this.taskWithFid.push({RowId: fid});
console.log('fid: '+fid);
}.bind(this));