2015-01-08 4 views
1

у меня есть проблемы со следующей ситуацией:Как получить массив значений атрибутов из objectarray

У меня есть массив объектов, которые все содержат один и тот же атрибут, который называется src

Перед добавления new Object (с атрибутом src), я хочу проверить, существует ли значение уже в одном атрибуте src в массиве объектов.

Поэтому я хотел использовать $.inArray() с новым src в качестве первого параметра и как массив не массив объектов, а массив значений атрибутов из массива объектов.

Как пример:

У меня есть

var arrayOfObjects = [{ 
    src : "source1", 
    otherAttribute : "value" 
}, { 
    src : "source2", 
    otherAttribute : "value" 
}]; 

Мой вопрос: Есть ли построить в функции в JavaScript/JQuery, которая возвращает

["source1","source2"] 

при вызове с functionX(arrayOfObjects)?

+0

возможно дубликат [Как я могу преобразовать «аргументы» объект в массив в JavaScript?] (Http://stackoverflow.com/questions/960866/how-can-i-convert-the-arguments -объект-к-массиву-в-javascript) – Stratus3D

ответ

2

Ну, вы всегда можете использовать Array.prototype.map():

var sources = arrayOfObjects.map(function(obj) { 
    return obj.src; 
}); 

... но для вашего конкретного случая, я бы предпочел выбрать несколько иной подход - проверка против массива непосредственно Array.prototype.some():

function doesSourceExist(source) { 
    return arrayOfObjects.some(function(obj) { 
    return obj.src === source; 
    }); 
} 
+1

Спасибо вам большое! Поскольку мне нужен индекс элемента в любом случае (чтобы сфокусировать этот элемент), я использовал '$ .inArray' сейчас :) – Ba5t14n

0

Не ответ, а добавление к ответу @ raina77ow для более чистого кода.

function property(prop) { 
    return function(obj) { 
    return obj[prop]; 
    }; 
} 

var sources = arrayOfObjects.map(property('src')); 
Смежные вопросы