仅返回Javascript中对象数组中的某些属性

时间:2014-06-26 21:17:38

标签: javascript arrays javascript-objects

如果我有一个这样的对象

var object = function(key,text)
{
    this.key = key;
    this.text = text;
}

并创建这些对象的数组

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');

有没有办法可以只检索数组中所有对象的一个​​属性?例如:

var keyArray = objArray["key"]; 

上面的例子没有将set keyArray返回给任何东西,但我希望它会设置为这样:

keyArray = [
    'key1',
    'key2',
    'key3']

有没有人知道如何在不迭代objArray并手动将每个键属性复制到键数组的情况下执行此操作?

5 个答案:

答案 0 :(得分:20)

使用Array.prototype.map()函数

可轻松完成此操作
var keyArray = objArray.map(function(item) { return item["key"]; });

如果您打算经常这样做,您可以编写一个抽象地图的函数:

function pluck(array, key) {
  return array.map(function(item) { return item[key]; });
}

事实上,Underscore库有一个名为pluck的内置函数,它正是这样做的。

答案 1 :(得分:1)

var object = function(key,text) {
    this.key = key;
    this.text = text;
}

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');

var keys = objArray.map(function(o,i) {
  return o.key;
});

console.log(keys); // ["key1", "key2", "key3"]

JS Bin示例

<强> http://jsbin.com/vamey/1/edit

请注意,旧版浏览器可能不支持map,但您可以使用for循环轻松完成此操作:

var keys = [];

for (var i = 0; i < objArray.length; i++) {
  keys.push(objArray[i].key);
}

JS Bin示例

<强> http://jsbin.com/redis/1/edit

答案 2 :(得分:0)

你会想做这样的事情:

objArray.map(function (obj) { return obj.key; });

这是一个演示的JSFiddle:http://jsfiddle.net/Q7Cb3/


如果您需要较旧的浏览器支持,可以使用自己的方法:

JSFiddle演示:http://jsfiddle.net/Q7Cb3/1/

function map (arr, func) {
    var i = arr.length;
    arr = arr.slice();
    while (i--) arr[i] = func(arr[i]);
    return arr;
}

答案 3 :(得分:0)

某些东西必须遍历数组的元素。您可以使用.map()使其看起来不错:

var keys = objArray.map(function(o) { return o.key; });

您可以创建一个函数来生成检索特定键的函数:

function plucker(prop) {
  return function(o) {
    return o[prop];
  };
}

然后:

var keys = objArray.map(plucker("key"));

答案 4 :(得分:0)

真的“objArray”是一个里面有3个对象的数组,如果你想要键列表,可以试试这个:

var keys = [];
for(a in objArray) {
    keys.push(objArray[a].key);
}

你有var键,三个键。

希望有所帮助! :)