jQuery中是否有任何函数等同于PHP的array_column()?

时间:2014-10-26 16:09:45

标签: javascript php jquery

jQuery中PHP array_column()的等价物是什么?我需要数组中的数据而不需要循环,就像在PHP中一样。

6 个答案:

答案 0 :(得分:12)

您可以使用.map()执行此操作。想象一下数据库行的获取。

var array = [
    {
        id: 1,
        name: 'foo'
    },
    {
        id: 2,
        name: 'bar'
    },
];
var names = arrayColumn(array, 'name');
console.log(names);

function arrayColumn(array, columnName) {
    return array.map(function(value,index) {
        return value[columnName];
    })
}

答案 1 :(得分:1)

var data = [];
data.push({col1: 1, col2: 2});
data.push({col1: 3, col2: 4});
data.push({col1: 5, col2: 6});

Array.prototype.getColumn = function(name) {
    return this.map(function(el) {
       // gets corresponding 'column'
       if (el.hasOwnProperty(name)) return el[name];
       // removes undefined values
    }).filter(function(el) { return typeof el != 'undefined'; }); 
};

console.log(data.getColumn('col1'));

结果

Array[3]
0: 1
1: 3
2: 5

可以通过获取数组的第一个元素并检查它是否具有相应的键来跳过.filter部分。但有些行可能根本没有那个键,而其他行可能有它。

答案 2 :(得分:1)

这篇文章的底部是我的PHP array_column()的JavaScript实现。不需要jQuery。

使用示例:

$ ./bin/swap2nd2
Alex are mere
Aelx are mree

实现:

var records = [
    {id: 2135, first_name: 'John',  last_name: 'Doe'},
    {id: 3245, first_name: 'Sally', last_name: 'Smith'},
    {id: 5342, first_name: 'Jane',  last_name: 'Jones'},
    {id: 5623, first_name: 'Peter', last_name: 'Doe'}
];
var first_names = arrayColumn(records, 'first_name');
// => ["John", "Sally", "Jane", "Peter"]
var last_names = arrayColumn(records, 'last_name', 'id');
// => {2135: "Doe", 3245: "Smith", 5342: "Jones", 5623: "Doe"}
var persons = arrayColumn(records, null, 'id');
// => {
//        2135: {id: 2135, first_name: 'John',  last_name: 'Doe'},
//        3245: {id: 3245, first_name: 'Sally', last_name: 'Smith'},
//        5342: {id: 5342, first_name: 'Jane',  last_name: 'Jones'},
//        5623: {id: 5623, first_name: 'Peter', last_name: 'Doe'}
//    }

答案 3 :(得分:1)

使用箭头符号的Fabian答案的缩写版本:

let array = [
    {
        id: 1,
        name: 'foo'
    },
    {
        id: 2,
        name: 'bar'
    },
];

let names = array.map( el => el.name );

答案 4 :(得分:0)

我用它来构建一个对象~php之类的关联数组。通过选择源数组的.id,并将该id构建为新数组的索引,并包含旧源数组的相同内容。

var categoriesById={};

for(item in cacheObject.Categories){
categoriesById[cacheObject.Categories[item].id]=cacheObject.Categories[item];
}

答案 5 :(得分:-4)

你的意思是这样的:

var a = {};
a['alfa'] = 0;
a['beta'] = 1;

alert(a['alfa']);