【问题标题】:How to dynamically fill (associative) array如何动态填充(关联)数组
【发布时间】:2013-11-26 09:13:05
【问题描述】:

我需要的是,基于changepos的值(我们称这个值N,我想在racks元素中填写punkt的第N个位置。

机架中值的示例 firebug 输出

PMS02
    Object { punkt=[3], label="slow one"}

label
    "slow one"

punkt
    [Object { x="1", y="3"}, Object { x="1", y="4"}, Object { x="1", y="5"}]

0
    Object { x="1", y="3"}

1
    Object { x="1", y="4"}

2
    Object { x="1", y="5"}

JS代码:

changePos= 4; // 4 is an example here
if(!(trimdevID in racks))
{
    alert("Defining...");
    document.getElementById('devLabel').value.trim()
    racks[trimdevID] = {
        label: document.getElementById('devLabel').value.trim(),
        punkt: [{
            x: $(this).index(),
            y: $(this).parent().index()}]}
}

我尝试了什么:

if(!(trimdevID in racks))
{
    alert("Defining...");
    document.getElementById('devLabel').value.trim()
    racks[trimdevID] = {
        label: document.getElementById('devLabel').value.trim(),
        punkt: [
            for(var i=0;i<changepos-1;i++){
                {
                    x: 0,
                    y: 0}
            }
            {
                x: $(this).index(),
                y: $(this).parent().index()}
        ]}
}

【问题讨论】:

  • 您实际上需要更改哪些值? label?整个punkt 还是其中的一个元素?
  • 只有一个来自 punkt 的元素,位于第 n(changepos) 个位置。我还认为将其他元素定义为 0 会更安全,我的意思是:如果我需要例如更改第二个元素,我会将第一个元素填写为 {x:0,y:0} .
  • 在“我试过的”代码中的for 循环真的有效吗? :O
  • @BeNdErR 在 python 中可能,在 js 中没有办法 =)
  • 不,出现语法错误:(

标签: javascript jquery arrays multidimensional-array javascript-objects


【解决方案1】:

您不能将for 循环放在数组文字中。使用循环分配给数组元素。

if(!(trimdevID in racks))
{
    alert("Defining...");
    var label = document.getElementById('devLabel').value.trim();
    var punkt = [];
    for (var i = 0; i < changepos-1; i++) {
        punkt[i] = {x: 0, y: 0};
    }
    punkt[changepos] = {
        x: $(this).index(),
        y: $(this).parent().index(),
    };
    racks[trimdevID] = {
        label: label,
        punkt: punkt
    };
}

您还致电document.getElementById().value.trim(),但没有对结果做任何事情。我将其更改为设置一个变量,然后在创建对象时使用它。

【讨论】:

  • 谢谢老兄,正是我要找的东西,有了这个我也可以省略 for 循环,直接把它放在位置,而下面的那些将是未定义的!谢谢
  • 也改变了 ;在此索引到 racks[trimdevID].punkt[changPos] = { x: $(this).index(), y: $(this).parent().index() }
【解决方案2】:
changePos= 4; 4 is an example here
if(!(trimdevID in racks))
{
    alert("Defining...");
    document.getElementById('devLabel').value.trim()
    racks[trimdevID] = {
        label: document.getElementById('devLabel').value.trim(),
        punkt: []
    }
    for (var i = 0; i < changePos /* -1 */; i++)
        racks[trimdevID][punkt][i] = {x:0, y:0};
    racks[trimdevID][punkt][changePos /* -1 */] = {
        x: $(this).index(),
        y: $(this).parent().index()
    }    
}

决定你是否需要那个-1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2017-05-20
    • 2015-08-15
    • 2012-02-09
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多