JavaScript对象中有多个相同的键

时间:2015-12-12 00:50:41

标签: javascript javascript-objects

用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";

请帮忙。

3 个答案:

答案 0 :(得分:1)

您需要使用正确的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/

答案 1 :(得分:0)

你不想拥有这种结构吗?:

for {
    b ← a.map(list ⇒ list.grouped( 2 ).toList)
    res ← Future.sequence(b.map(f))
} yield res

你可以达到同样的目的:

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

答案 2 :(得分:0)

$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";