angular-cn/aio/tools/transforms/angular-base-package/rendering/hasValues.js

24 lines
766 B
JavaScript

module.exports = function hasValues() {
return {
name: 'hasValues',
process: function(list, property) {
if (!list || !Array.isArray(list)) return false;
return list.some(item => readProperty(item, property.split('.'), 0));
}
};
};
/**
* Search deeply into an object via a collection of property segments, starting at the
* indexed segment.
*
* E.g. if `obj = { a: { b: { c: 10 }}}` then
* `readProperty(obj, ['a', 'b', 'c'], 0)` will return true;
* but
* `readProperty(obj, ['a', 'd'], 0)` will return false;
*/
function readProperty(obj, propertySegments, index) {
const value = obj[propertySegments[index]];
return !!value && (index === propertySegments.length - 1 || readProperty(value, propertySegments, index + 1));
}