JavaScript 对象中的多个相同键

Multiple same keys in the JavaScript object

用 Google 搜索了最后几个小时,但找不到不编写任何函数或使用 map() 的方法。

我试图通过搜索前两个键找到在以下对象结构中获取 price 值的最简单方法。

var itemPrices = {
    '1': { '1': 1000 },
    '1': { '2': 1000 },
    '1': { '3': 1100 },
    '2': { '1': 900 },
    '2': { '2': 900 },
    '3': { '4': 2200 },
    '3': { '5': 700 },
    '4': { '1': 1200 },
    '4': { '2': 1200 },
};

console.log(itemPrices['1']['1']); // Returns undefined because it's overwritten by `['1']['3']`.

我正在使用 PHP 生成此对象:

echo "  var itemPrices = {\n";
foreach($_SESSION['item_prices'] as $item_price) {
    $category_id = $item_price['categoryid'];
    $type_id = $item_price['typeid'];
    $price = $item_price['price'];
    echo "      '$category_id': { '$type_id': $price },\n";
}
echo "  };\n";

请帮忙。

你不想要这样的结构吗?:

var itemPrices = {
  1: {
    1: 1000,
    2: 2000,
    3: 3000
  },
  2: {
    1: 1000,
    2: 2000
  }
}

你可以达到同样的效果:

var itemPrices = {};
itemPrices[1] = {};
itemPrices[1][1] = 1000;
itemPrices[1][2] = 2000;
itemPrices[2] = {};
itemPrices[2][1] = 1000;
itemPrices[2][2] = 2000;

您需要使用合适的 JavaScript 对象。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

var itemPrices = {
    '1': { 
        '1': 1000,
        '2': 1000,
        '3': 1100
    },
    '2': { 
        '1': 900,
        '2': 900 
    },
    '3': {
        '4': 2200,
        '5': 700
    },
    '4': {
        '1': 1200,
        '2': 1200
    },
};

应该让你做

console.log(itemPrices['1']['1']);

您还需要稍微调整 PHP 脚本以使其正确输出!

JSFiddle:https://jsfiddle.net/f8kbca3h/

$data = array();
foreach($_SESSION['item_prices'] as $item_price) {
    $category_id = $item_price['categoryid'];
    $type_id = $item_price['typeid'];
    $price = $item_price['price'];
    if (!isset($data[$category_id]))
    {
        $data[$category_id] = array();
    }
    $data[$category_id][$type_id] = $price;
}
echo "  var itemPrices = ".json_encode($data).";\n";