it-swarm.com.ru

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

16
ragesalmon

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

17
Jacob Krall

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

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;
}
0
Robert Messerle
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

0
Miguel Mota

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

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

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

У вас в var keys три ключа.

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

0
Rubén Guerrero