问题 从角度对象数组中选择特定属性


我有一组对象,例如像下面一个。

[{ "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

没有我们循环,有没有优雅的方式?


1196
2017-08-13 05:04


起源

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


答案:


您可以使用 map 功能如下。这是现代浏览器的脚本我的意思是它将完美地工作 IE8+ 版本。它不会起作用 IE8 旧版本。

按照文档

map()方法创建一个新数组,其中包含调用a的结果   为此数组中的每个元素提供了函数。

在数组的每个元素上调用定义的回调函数,和   返回包含结果的数组。

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

11
2017-08-13 05:11



仅供参考IE8不是“现代浏览器”,不支持该方法。 - undefined
@Vohuman感谢您的信息先生,这就是我提到的原因 IE8+ 浏览器。 - Vineet
@Vineet运作良好,谢谢 - Chaitanya Gadkari