动态时如何获取对象的属性

时间:2014-09-02 06:11:47

标签: javascript angularjs

我遇到了一个问题,我有一个类似的数组:

[
  [{"Id":"10009"},{"Name":"TEST 2"}],
  [{"Phone":"77777777"},{"Fax":"null"}],
  [{"Description":"null"},{"Type":"null"}],
  [{"Website":"null"}]
]

它包含对象的子数组,每个对象都有自己的属性,问题是我们可以将对象用作 obj.Id或obj.Name 等,但在这种情况下如何使用我不想硬编码 .propert ,我也可以使用 obj [] approch,但在这里我没有获得属性名称。

怎么办?

2 个答案:

答案 0 :(得分:1)

您的数据结构对于访问特定属性值不是很友好。如果这是我的数据并且我可以控制结构,我会将其重新设计为更适合您需要的访问类型。数据结构设计的主要目标是根据您希望在其中查找内容的方式设置结构。您的数据结构对于查找特定属性并不是很好(说实话,我不确定它的优化内容)。

正如您现在所拥有的,在不对数组中的给定索引值进行硬编码的情况下查找特定属性的唯一方法是手动搜索它。

因此,如果您正在寻找Id属性,则可以执行此操作:

var info = [
  [{"Id":"10009"},{"Name":"TEST 2"}],
  [{"Phone":"77777777"},{"Fax":"null"}],
  [{"Description":"null"},{"Type":"null"}],
  [{"Website":"null"}]
]

function findPropValue(data, propName) {
    data.forEach(function(current) {
        current.forEach(function(item) {
            if (propName in item) {
                return item[propName];
            }
        });
    });
}

var id = findPropValue(info, "Id");

仅供参考,您的数据将更容易处理:

var info = [
  {"Id":"10009", "Name":"TEST" ,"Phone":"77777777","Fax":"null","Description":"null","Type":"null","Website":"null"},
  {"Id":"10010", "Name":"TEST2" ,"Phone":"88888888","Fax":"null","Description":"null","Type":"null","Website":"null"}
];

答案 1 :(得分:0)

你可以迭代属性

angular.foreach(outerarray, function(array){
    var obj = {};
    angular.foreach(array, function(property){
          for(prop in property) {
                obj[prop] = property[prop]
          }

      });
});

这样做会将您的数组转换为

{"Id":"10009","Name":"TEST2","Phone":"77777777","Fax":"null","Description":"null","Type":"null","Website":"null"}