kidoOooOoooOOom

IT系で開発やってます

underscore.js の flatten

下記のような複数の配列の中から、特定の値が1個でも含まれているかどうかを確認する処理のため、underscore.jsのflattenを使って一旦1次元の配列にまとめてからチェックするようなのを書いた。

var arrayTest = {};
arrayTest[1] = {};
arrayTest[1][100] = {materials: [1,2,3,4]};
arrayTest[2] = {};
arrayTest[2][200] = {materials: [4,5,6]};

var materialIds = _.uniq(_.flatten(_.map(arrayTest, function(hoge) {
  return _.map(hoge, function(foo) {
    return foo.materials;
  });
})));

console.log('materialIds : ' + materialIds); // 1,2,3,4,5,6 が出力

var targetMaterialId = 3;
var existTarget = _.contains(materialIds, targetMaterialId);
console.log('targetExistance is ' + !!existTarget); // trueが出力

targetMaterialId = 7;
existTarget = _.contains(materialIds, targetMaterialId);
console.log('targetExistance is ' + !!existTarget); // falseが出力

ちょっと_がネストしまくって読みづらいかな。。。