【问题标题】:Select a specific property from array of objects angular从对象数组中选择特定属性
【发布时间】:2015-11-05 22:14:33
【问题描述】:

我有一个对象数组,例如如下所示。

[{ "foo" : "a", "bar" : "x", baz: 1},
{ "foo" : "b", "bar" : "y", baz: 2},
{ "foo" : "c", "bar" : "z", baz: 3}]

现在我只想从这个数组中选择 foo 属性到另一个数组,比如

["a","b","c"]

我可以使用循环来做到这一点,并将每个属性添加到另一个数组中

var fooArray =[];
angular.forEach(arrayName, function (value, key) {
    fooArray.push(value.foo);               
});

但是这是可能的,就像我们在 c# linq select 语句中所做的那样,不需要像循环进入数组一样

var fooArray = arrayName.Select(m => m.foo) // c# way

有没有不循环的优雅方式?

【问题讨论】:

  • 使用 ECMAScript 2015:arrayName.map(m => m.foo)
  • @Vohuman : 如何将 ECMAScipt 与 angular 混合使用,我以前没用过这个?
  • @Chaitanya Gadkari:ECMAScript 是 JavaScript 的底层规范。它仅适用于受支持的浏览器(或者如果您有转换器)。那时它只是一个语言特性,它适用于 Angular,因为 Angular 只是一个在该语言中运行的框架。

标签: jquery arrays angularjs linq


【解决方案1】:

您可以使用map 函数,如下所示。它是现代浏览器的脚本,我的意思是它可以在IE8+ 版本中完美运行。它不适用于 IE8 旧版本。

根据文档

map() 方法使用调用的结果创建一个新数组 在此数组中的每个元素上提供函数。

对数组的每个元素调用定义的回调函数,并且 返回一个包含结果的数组。

var result = arrayName.map(function(a) {return a.foo;});

【讨论】:

  • 仅供参考 IE8 不是“现代浏览器”,不支持该方法。
  • @Vohuman 感谢您的信息先生,这就是我提到IE8+浏览器的原因。
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
相关资源
最近更新 更多