Javascript数组的对象到字符串数组,更简单的方法?

时间:2010-01-15 14:53:51

标签: javascript arrays

我已经习惯了C#的语法糖(而不是我想要的javascript),我发现这非常冗长。

有没有更好的方法呢?

var justColumnNames = new Array();    
for( i= 0; i< columnsInfo.length; i++)
{
   justColumnNames[i] = columnsInfo[i].Name;
}

(顺便说一下,我在页面中有Extjs,我真的不能使用任何其他库) 感谢

3 个答案:

答案 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 ...
}

但我通常不喜欢修改原生对象。