pickup<T> static method

List<T> pickup<T>(
  1. dynamic target,
  2. String keywordsStr
)

pickup target attributes for Map, List

Implementation

static List<T> pickup<T>(dynamic target, String keywordsStr) {
  if (isEmpty(keywordsStr) ||
      isEmpty(target) ||
      (target is! Map && target is! List)) {
    return List.empty();
  }
  List<String> keywords = keywordsStr.split("-");
  List<T> cherries = [];
  if (target is List && target.isNotEmpty) {
    for (var element in target) {
      List<T> tmp = pickup(element, keywordsStr);
      cherries.addAll(tmp);
    }
    return unique(cherries);
  }
  target.keys.forEach((element) {
    dynamic value = target[element];
    if (keywords.contains(element)) {
      cherries.add(value);
    }
    if (value is Map) {
      List<T> tmp = pickup(
          value.map((key, value) => MapEntry(key.toString(), value)),
          keywordsStr);
      cherries.addAll(tmp);
    }
    if (value is List) {
      List<T> tmp = pickup(value, keywordsStr);
      cherries.addAll(tmp);
    }
  });
  return unique<T>(cherries);
}