Возврат только определенных свойств из массива объектов в 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 пример
обратите внимание, что старые браузеры могут не поддерживать карта но вы можете легко сделать это с помощью for
петли:
var keys = [];
for (var i = 0; i < objArray.length; i++) {
keys.push(objArray[i].key);
}
JS Bin пример