LANG SELRCT

コードを書く場所

2019年6月24日月曜日

オブジェクトの中から条件に一致する要素を抜き出す(AND検索)


以下のようなオブジェクトのプロパティ名 ja 中で「う」と「お」の両方含む値を取得したい



コード.gs
var obj = [
  {"en": "Aries", "ja": "おひつじ座"},
  {"en": "Taurus", "ja": "おうし座"},
  {"en": "Gemini", "ja": "ふたご座"},
  {"en": "Cancer", "ja": "かに座"},
  {"en": "Leo", "ja": "しし座"},
  {"en": "Virgo", "ja": "おとめ座"},
  {"en": "Libra", "ja": "てんびん座"},
  {"en": "Scorpius", "ja": "さそり座"},
  {"en": "Sagittarius", "ja": "いて座"},
  {"en": "Capriconus", "ja": "やぎ座"},
  {"en": "Aquarius", "ja": "みずがめ座"},
  {"en": "Pisces", "ja": "うお座"}
]

var pattern;
function filter_obj() {
  var values = ['う', 'お'];
  pattern = getAndPattern(values);
  var filtered = obj.filter(judge);
  var result = get_result(filtered);
  Logger.log(result);
}

function judge(items) {
  var regexp = new RegExp(pattern);
  var judged = regexp.test(items["ja"]);
  return judged;
}

function get_result(filtered) {
  var result = [];
  for (var i = 0; i < filtered.length; i++) {
    result.push([filtered[i]["en"], filtered[i]["ja"]]);
  }
  return result;
}

function getAndPattern(values) {
  var pattern = '^';
  for(var i = 0; i < values.length; i++) {
    pattern += '(?=.*' + values[i] + ')';
  }
  return pattern;
}



実行結果

 [[Taurus, おうし座], [Pisces, うお座]]


関連記事

オブジェクトの中から条件に一致する要素を抜き出す(filter)(正規表現を使う)
正規表現でAND検索を試してみる2