繁体   English   中英

基于第一个索引过滤二维javascript数组

[英]Filtering two-dimensional javascript array based on 1st index

我有以下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]

并仅在随后的代码中使用这些项目。 谢谢。

似乎您具有产品类别,并且在每个类别中都有一些产品。

看起来类别和产品都有一种ID,您将其用作数组索引。

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

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

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

例如:

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
}

感谢您的帮助,它为我提供了使用json对象的线索。 实际上,我具有产品数据和每个产品具有的带有属性的变体(即,与类别和具有属性的产品类似的逻辑,如答案所示)。

最终,我用json对我最初的php数组(“ $ array”)进行了编码,从中获取了数据,

$array_json=json_encode($array);

并将其传递给javascript(这是通过smarty完成的,因为我在应用程序中使用了smarty模板)。

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

然后在smarty模板文件中,从smarty数组中创建了一个javascript数组:

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'是用户选择的产品id值,将其与每个product_id值进行比较,并在匹配时对特定产品的变体及其atttributes属性进行迭代, atttributes属性始终只有一个元素,其元素的索引为some_attribute_id ,并且它的属性之一是attribute_name ,它是用于在动态填充的选择菜单中显示的值之一(以及variant_id值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM