配列と連想配列

by yshrkn

JavaScript

var fruits = [{
  name: "apple",
  price: 100,
  stocks: 50
}, {
  name: "orange",
  price: 140,
  stocks: 100
}, {
  name: "straberry",
  price: 500,
  stocks: 30
}];

var vegetables = {
  potate: {
    price: 200,
    stocks: 40
  },
  onion: {
    price: 160,
    stocks: 80
  },
  carrot: {
    price: 90,
    stocks: 50
  }
};


function getFruit(name) {

  fruits.forEach(function(obj) {
    for (var key in obj) {
      if (obj.name === name) {
        console.log(obj[key]);
      }
    }
  });
  return;
}

function getVegetable(name) {

  for (var key in vegetables) {
    if (key === name) {
      for (var prop in vegetables[key]) {
        console.log(key + "の" + prop + ":" + vegetables[key][prop]);
      }
    }
  }
  return;
}

function getVarietyOfFruits() {
  return fruits.length;
}

function getVarietyOfVegetables() {
  return (function() {
    var variety = 0;
    for (var key in vegetables) {
      variety++;
    }
    return variety;
  }());
}

var orange = getFruit('orange');
var carrot = getVegetable('carrot');
var varietyOfFruits = getVarietyOfFruits();
var varietyOfVegetables = getVarietyOfVegetables();

console.log("varietyOfFruits:", varietyOfFruits);
console.log("varietyOfVegetables:", varietyOfVegetables);

// Q:配列と連想配列の違い(便利な点・不便な点)は何だと思いますか?

/*
自分としては、構造的なデータ保持のためには、キー値に任意の名前が付けられる連想配列、
そうでないなら通常の配列を使えばいいかなとの認識です。
※各マス目が0か1かみたいなデータは、通常の配列(2次元配列等)で管理すると思いますが。
*/

/**
 * ★配列
 *  ▼配列内容へのアクセス
 *  配列の後ろにブラケット記法を用いてインデックスを記述 myArray[0],myArray[1]...
 * 
 * ★連想配列
 *  ▼配列内容へのアクセス
 *   配列の後ろに.(ドット)をつけて、キーとなる値を続ける、もしくはブラケット記法を用いる。
 * 
 *     - 一般的な連想配列
 *       myArray["key"]
 * 
 *     - 配列の中の値がオブジェクトの場合
 *       myArray.obj   or   myArray["obj"]
 * 
 *        ※オブジェクトの中のプロパティへは、
 *				myArray.obj.prop   or   myArray.obj[prop]   or   myArray["obj"]["prop"]["something"]
 * 
*/