Javascript不想在循环中更改对象值

时间:2015-09-02 07:43:18

标签: javascript angularjs

我需要将对象发送到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>

你能帮帮我吗?

Here is the code:

{{1}}

5 个答案:

答案 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 },因此每次都会创建新变量。

这是working flunker

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));