Возврат только определенных свойств из массива объектов в 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, три ключа.
Надеюсь, это поможет! :)