Я столкнулся с той же проблемой и на основе guya answer Я расширил библиотеку подчёркивания, а также добавил немного больше функциональности, которую я требовал. Вот Gist .
/**
* Merges two object-like arrays based on a key property and also merges its array-like attributes specified in objectPropertiesToMerge.
* It also removes falsy values after merging object properties.
*
* @param firstArray The original object-like array.
* @param secondArray An object-like array to add to the firstArray.
* @param keyProperty The object property that will be used to check if objects from different arrays are the same or not.
* @param objectPropertiesToMerge The list of object properties that you want to merge. It all must be arrays.
* @returns The updated original array.
*/
function merge(firstArray, secondArray, keyProperty, objectPropertiesToMerge) {
function mergeObjectProperties(object, otherObject, objectPropertiesToMerge) {
_.each(objectPropertiesToMerge, function (eachProperty) {
object[eachProperty] = _.chain(object[eachProperty]).union(otherObject[eachProperty]).compact().value();
});
}
if (firstArray.length === 0) {
_.each(secondArray, function (each) {
firstArray.push(each);
});
} else {
_.each(secondArray, function (itemFromSecond) {
var itemFromFirst = _.find(firstArray, function (item) {
return item[keyProperty] === itemFromSecond[keyProperty];
});
if (itemFromFirst) {
mergeObjectProperties(itemFromFirst, itemFromSecond, objectPropertiesToMerge);
} else {
firstArray.push(itemFromSecond);
}
});
}
return firstArray;
}
_.mixin({
merge: merge
});
Надеюсь, это будет полезно! Привет!
$('*[data-customerID="22"]');
Вы должны иметь возможность опустить *
, но, если я правильно помню, в зависимости от того, какую версию jQuery вы используете, это может дать ошибочные результаты.
Обратите внимание, что для совместимости с API селекторов ( document.querySelector {, all}
) кавычки вокруг значения атрибута ( 22
) не могут быть опущены в этот случай .
Кроме того, если вы много работаете с атрибутами данных в сценариях jQuery, вы можете рассмотреть возможность использования плагина пользовательских атрибутов данных HTML5 . Это позволяет вам писать еще более читаемый код, используя .dataAttr ('foo')
, и приводит к уменьшению размера файла после минификации (по сравнению с использованием .attr ('data-foo')
).