Возврат только определенных свойств из массива объектов в 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 и ручного копирования каждого ключевого свойства в массив ключей?

5 ответов


это легко сделать с помощью тега массив.прототип.map () функция:

var keyArray = objArray.map(function(item) { return item["key"]; });

Если вы собираетесь делать это часто, вы можете написать функцию, которая абстрагирует карту:

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

фактически, библиотека подчеркивания имеет встроенную функцию наглеют что делает именно это.


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

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;
}

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

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

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

у вас есть клавиши var, три клавиши.

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


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