怎么说我的json格式化OBJ的长度不是

时间:2016-02-23 10:07:28

标签: javascript json object key extendscript

我只是想创建一个包含来自After Effects ScriptUI API的几个控件的对象。

这就是我的obj的样子:

var easeyPeasy = {};

// groups
easeyPeasy.groups = {
  "easeIn_grp": ease__Panel.add('group', undefined, {
    name: 'easeIn group'
  }),
  "easyEase_grp": ease__Panel.add('group', undefined, {
    name: 'easyEase group'
  }),
  "easeOut_grp": ease__Panel.add('group', undefined, {
    name: 'easeOut group'
  })
};

// labels
easeyPeasy.label = {
  "easeIn_label": easeyPeasy.groups["easeIn_grp"].add('statictext', undefined, 'ease in:', {
    name: 'easeIn_label'
  }),
  "easyEase_label": easeyPeasy.groups["easyEase_grp"].add('statictext', undefined, 'easy ease: ', {
    name: 'easyEase_label'
  }),
  "easeOut_label": easeyPeasy.groups["easeOut_grp"].add('statictext', undefined, 'ease out:', {
    name: 'easeOut_label'
  })
};

// slider
easeyPeasy.slider = {
  "easeIn_slider": easeyPeasy.groups["easeIn_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easeIn_slider'
  }),
  "easyEase_slider": easeyPeasy.groups["easyEase_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easyEase_slider'
  }),
  "easeOut_slider": easeyPeasy.groups["easeOut_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easeOut_slider'
  })
}

// inputs
easeyPeasy.inputs = {
  "easeIn_input": easeyPeasy.groups["easeIn_grp"].add('edittext', undefined, 50, {
    name: 'easeIn_input'
  }),
  "easyEase_input": easeyPeasy.groups["easyEase_grp"].add('edittext', undefined, 50, {
    name: 'easyEase_input'
  }),
  "easeOut_input": easeyPeasy.groups["easeOut_grp"].add('edittext', undefined, 50, {
    name: 'easeOut_input'
  })
}

如果我知道尝试返回length的{​​{1}},例如我只会easeyPeasy.inputs

undefined

除此之外,我无法通过键索引在我的obj中选择值。它只能通过密钥串工作。

工作:

alert(easeyPeasy.inputs.length)

无效:

alert(easeyPeasy.inputs["easeIn_input"])

有谁知道我在这里缺少什么?提前致谢

3 个答案:

答案 0 :(得分:4)

您似乎期望JavaScript对象的行为类似于PHP数组。他们没有。

数组的属性名称为数字,长度属性等于最高数字属性的名称加一。

对象只有命名属性。

您可以使用Object.keys()在对象中生成属性名称数组。

var data = {
  foo: "foo_val",
  bar: "bar_val"
};
var props = Object.keys(data);
for (var i = 0; i < props.length; i++) {
  document.body.appendChild(
    document.createTextNode(
      data[props[i]]
    )
  )
  document.body.appendChild(
    document.createElement("br")
  );
}

答案 1 :(得分:0)

如果要循环对象的属性,还可以使用for-in

实施例

&#13;
&#13;
var obj = {
  test1:"test1",
  var1:10,
  var2:20,
  var3:30
}

for (var key in obj){
  document.write(key + " :  " + obj[key] + "<br/>");
}
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

您已经创建了一个Javascript对象;它只存储可通过密钥访问的值。

要确定字符长度,首先需要将其转换为字符串表示形式:

var json = JSON.stringify(easeyPeasy)