【问题标题】:Return just the keys of an array in AngularJS仅返回 AngularJS 中数组的键
【发布时间】:2016-11-17 08:47:02
【问题描述】:

我的问题有一个解决方案,但我不知道是否存在更好的解决方案。

在我实施之后:

查看:

<md-list>
   <md-list-item>
      <span ng-repeat="item in ::items track by $index" flex="auto">
          {{::item}}
      </span>
      <md-divider></md-divider>
   </md-list-item>
</md-list>

控制器:

CrudSvc.GetAll().$promise.then(
  function (res) {
     $scope.items = GetKeyForTitle(res);
  },
  function (err) {
     //err code...
  }
);

function GetKeyForTitle(data) {
   var arrItems = [];
   var resData = data[0];

   angular.forEach(resData, function (val, key) {
       arrItems.push(key);
   });

   return arrItems;
}

JSON 数据定义简单:

[
  {
    "NAME": "John Doe",
    "AGE": 25,
    "CITY": "New York",
    "COUNTRY": "USA"
  },...
]

对于我的解决方案,我使用 data[0] 只给我第一个数据,否则我总是得到相同的密钥,我只需要一次密钥。

【问题讨论】:

  • @Rajesh 感谢您的评论,但在线程中没有示例仅从第一个数据中提取键,因为我在数组中有 10 个对象,这意味着在您的情况下我会得到十次相同的键。
  • 如果我理解正确,问题的目的是获取对象数组中第一个对象的键。现在您已经弄清楚了获取第一个对象的部分。因此,您所需要的只是一种获取密钥的方法,即提到的帖子亮点
  • @Rajesh 我的问题是,是否存在更好的解决方案而不是使用data[0]。你怎么能看到我已经定义了一个 forEach 来循环我的数组。

标签: javascript angularjs arrays for-loop


【解决方案1】:

使用Object.keys():

var data = [{
  "NAME": "John Doe",
  "AGE": 25,
  "CITY": "New York",
  "COUNTRY": "USA"
}, {
  "NAME": "John Doe",
  "AGE": 25,
  "CITY": "New York",
  "COUNTRY": "USA"
}, {
  "NAME": "John Doe",
  "AGE": 25,
  "CITY": "New York",
  "COUNTRY": "USA"
}, {
  "NAME": "John Doe",
  "AGE": 25,
  "CITY": "New York",
  "COUNTRY": "USA"
}, {
  "NAME": "John Doe",
  "AGE": 25,
  "CITY": "New York",
  "COUNTRY": "USA"
}]
var arrItems = Object.keys(data[0]);
console.log(arrItems);

https://repl.it/E0lI

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

【讨论】:

  • 这已在我分享的帖子中得到回答。您不应该回答非常基本的问题。而是找到类似的帖子并将其标记为重复
  • @Rajesh 您的链接上接受的答案使用for...in,这不再是访问对象键的首选方式。
  • 即使那篇文章也提到了这一点。我猜那得票最高。
  • @Rajesh,当然,但初学者可能很难知道其中的区别。
  • 伙计,我不想辩论,但最好将帖子标记为重复。这样,用户将接触到不同的方法,并通过 cmets 了解很多警告。没有错,但请使用此权限
【解决方案2】:

你可以使用

var allKeys = [];
for(var key in myObject) allKeys.push(k);

console.log("Keys " + allKeys.length + " keys: " + allKeys);

或者,如果您使用 Lodash/underscore,它们会让您的生活更加轻松。

【讨论】:

  • 我建议你也使用@ryanpcmcquen 的答案,但是当我们做数据时它看起来很阴暗[0] 可能使用对象模型来代替
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多