2012-01-05 100 views
0

我有定义了一些项目的下列的javascript阵列码:过滤二维JavaScript数组

product[17564] = Array; 
product[17564][1245] = ['BL-2810', 'text1']; 
product[17564][1246] = ['BL2810AB', 'text2']; 
product[17564][1247] = ['BL2810AN', 'text3']; 

product[17563] = Array; 
product[17563][1238] = ['BK-2810', 'text4']; 
product[17563][1239] = ['BK2810AB', 'text5']; 

product[17565] = Array; 
product[17565][1253] = ['CK-2810', 'text6']; 
product[17565][1254] = ['CK2810AN', 'text7']; 

和我要筛选的物品的基础上,“产品”的第一索引数组,由用户动态设置。例如,如果用户设定的号码是“17563”,然后我要筛选具有“17563”以下项目作为他们的第一个指数:

product[17563][1238] 
product[17563][1239] 

,并在随后一个代码只使用那些项目。 谢谢。

+3

该代码是没有做什么,你认为它是。将它们设置为“Array”,而不是将其设置为“[]”。 – Pointy 2012-01-05 14:36:56

+4

你应该使用对象而不是数组。你的问题是什么?如何使用变量访问属性/索引?的 – 2012-01-05 14:37:13

+0

可能重复的[在一个关联数组变量作为指数 - 使用Javascript(http://stackoverflow.com/questions/4091257/variable-as-index-in-an-associative-array-javascript) – 2012-01-05 14:38:42

回答

0

看来你有产品类别,并且在每个类别中都有一些产品。

它也看起来像分类和产品有一种id,你用作数组索引。

我认为你没有使用正确的数据结构来存储数据。

如果您只有3个类别的ID为17883,17884和17885,会发生什么? 您将以17886(计数位置0)位置的数组结束,以使用其中的3个位置。

您需要做的是存储类别信息和产品信息,然后用这些对象填充数组的对象。

例如:

var categories = new Array(); 

var category1 = new Object(); 
category1.id = 17883; 
category1.products = new Array(); 
categories[0] = category1; 

var product1 = new Object(); 
product1.id = 1233; 
product1.code = 'BK-404'; 
product1.name = 'text3'; 

category1.products[0] = product1; 
// and so on 

要阅读你会做的信息:

var userInput = //receive user input 
for(var i = 0; i < categories.length; i++){ 
    if(categories[i].id == userInput){ 
     return categories[i].products; 
    } 
    return null; //category not found 
} 
0

感谢您的帮助,它给了我使用JSON对象的线索。实际上,我有产品数据和每种产品具有的一些变体,并具有属性(即类似于具有属性的类别和产品的逻辑,如答案中)。

最后,我JSON编码我最初的PHP数组(“$阵列”),从中我得到的数据,

$array_json=json_encode($array); 

,并传递给JavaScript(这是通过Smarty的完成,因为我使用Smarty模板我的应用程序)。

$smarty->assign('array_json', $array_json); 

然后在smarty的模板文件,我创建一个JavaScript阵列出smarty的阵列:

var prd_array={$array_json}; 

和相续:

for (var product_id in prd_array) { 
      if(product_id == id) { 
       for (var variant_id in prd_array[product_id]) {      
        for (var some_attribute_id in prd_array[product_id][variant_id].attributes)  {       
         var variant_title = prd_array[product_id][variant_id].attributes[some_attribute_id].attribute_name;       
         document.myfrm.myselect.options[document.myfrm.myselect.options.length]=new Option("variant_title, variant_id, true, false);        
        } 
       } 
       break; 
      }    
     } 

为说明上述情况,我迭代通过嵌套循环到多维数组的更深层次,以便获得用户所选产品变体的一些属性值。'id'是值由用户,这是针对每product_id值进行比较和匹配时,特定产品的变体被重复,与他们的atttributes属性,它总是具有索引some_attribute_id单个元件一起,和中的一个所选择的产品ID它的属性是attribute_name其是用于在一动态填充选择菜单显示(连同variant_id值)的值中的一个。