Возврат только определенных свойств из массива объектов в Javascript

Если у меня есть такой объект, что

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 и вручную копировать каждое свойство ключа в массив ключей?

Ответ 1

Это легко сделать с помощью функции 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, которая делает именно это.

Ответ 2

Вы хотели бы сделать что-то вроде этого:

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

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

Обратите внимание, что старые браузеры могут не поддерживать карту, но вы можете легко сделать это с помощью цикла for:

var keys = [];

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

Пример JS Bin

http://jsbin.com/redis/1/edit

Ответ 4

Ну что-то нужно перебирать через элементы массива. Вы можете использовать .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"));

Ответ 5

На самом деле "objArray" - это массив, в котором есть 3 объекта внутри, если вы хотите список ключей, вы можете попробовать следующее:

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

У вас есть ключи var, три ключа.

Надеюсь, это поможет! :)