将对象推入数组

时间:2018-12-09 16:42:23

标签: javascript jquery arrays object

我的页面上有三个html按钮:

import types

...

if type(value) == types.FunctionType: # or isinstance(value, types.FunctionType)
    dct[attr] = trace(value)

...

现在我想创建一个数组,其中包含每个按钮的对象:

<button class="timespanbutton" value="1">1</button>
<button class="timespanbutton" value="2">2</button>
<button class="timespanbutton" value="3">3</button>

获得一个包含3个对象的数组,每个对象的名称都类似于

var timespanObject = {}, timespanArray = [];
countSpecificFacilitySlotAmount = 3;

$('.timespanbutton').each(function() {
 slotName = "timespanbutton" + $(this).val();
  timespanObject.timespanName = slotName;
    timespanArray.push(timespanObject);
});

我真的不知道我在做什么错,但是三个人都取了名字

timespanbutton1
timespanbutton2
timespanbutton3

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

您要更改同一对象的引用

  

通过示例了解其工作原理

let a ={};
let b = a;
a.name = 'xyz';
a.name = 'abc';
console.log(a.name)
console.log(b.name)

因此在上面的示例中,我们有两个变量a和b。 a是一个对象。

  1. 每次更新名称时,最后一个值都会被新值覆盖。
  2. 当我们将一个对象分配给任何其他变量时,它被分配为引用而不是副本。因此,当我们更改a的值时,如果打印b则可以看到更改。

下面的代码的工作版本

var timespanArray = [];
countSpecificFacilitySlotAmount = 3;

$('.timespanbutton').each(function() {
 slotName = "timespanbutton" + $(this).val();
 var timespanObject = {};
  timespanObject.timespanName = slotName;
    timespanArray.push(timespanObject);
});

console.log(timespanArray)
<script
			  src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
			  integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E="
			  crossorigin="anonymous"></script>
<button class="timespanbutton" value="1">1</button>
<button class="timespanbutton" value="2">2</button>
<button class="timespanbutton" value="3">3</button>

答案 1 :(得分:0)

您需要在循环中声明slotname变量,该变量在上下文中引用并且始终具有最后一个值。

所以试试这个

983     976     ideal_prime_fc  prime_fc    diff
2835    780     973             805         NaN
8       2259    983             983         0.0
2851    796     973             805         NaN
13      7       983             976         6.0   # added for test