我已经习惯了C#的语法糖(而不是我想要的javascript),我发现这非常冗长。
有没有更好的方法呢?
var justColumnNames = new Array();
for( i= 0; i< columnsInfo.length; i++)
{
justColumnNames[i] = columnsInfo[i].Name;
}
(顺便说一下,我在页面中有Extjs,我真的不能使用任何其他库) 感谢
答案 0 :(得分:5)
Ext.each( columnsInfo, function(elem){
justColumnNames.push(elem.name);
});
答案 1 :(得分:2)
您正在寻找的是map()
函数,它接受数组中的值,将函数应用于每个值并返回包含映射值的数组。我对ExtJS不太熟悉,知道它默认是否包含一个map函数,但this question链接到你可以使用的一些插件。
一旦你有了地图功能,你就可以这样做:
justColumnNames = columnsInfo.map(function(elem) { elem.Name });
答案 2 :(得分:-1)
您可以在javascript中轻松添加语法糖。一个常见的方法是为数组实现foreach / map / filter方法。大多数库都这样做。我的实施:
// List object, inherits from Array
function List (array) {
// Allow List constructor to convert
// Array object into List object:
if (array !== undefined) {
this.push.apply(this,array)
}
// each() method. A cross between map and filter:
this.each = function (callback) {
var ret = new List();
for (i=0,l=this.length;i<l;i++) {
var r = callback(this[i],i);
if (r !== undefined) {
ret.push(r);
}
}
return ret;
}
}
List.prototype = new Array();
// Direct translation of your code:
var justColumnNames = new List();
justColumnNames.each(function(n,i){
n = columnsInfo[i].Name;
});
// Or the more brief:
var justColumnNames = new List(columnsInfo).each(function(n){return n.Name});
有些人通过执行以下操作直接修改Array构造函数:
Array.prototype.each = function (callback) {
// see implementation above ...
}
但我通常不喜欢修改原生对象。