将数组匹配到JavaScript矩阵

将数组匹配到JavaScript矩阵,javascript,arrays,matrix,Javascript,Arrays,Matrix,我想知道如何解决匹配/查找问题,我“认为”多维数组就是解决方案。简而言之,我想将存储为cookie值的逗号分隔SKU列表与具有匹配产品名称的有限SKU列表进行匹配,并将匹配的产品名称打印到页面上。我不确定这是否是最好的方法,但根据我目前掌握的情况,我不清楚如何正确地将逗号分隔的字符串从cookie中分离出来(现在它正在尝试匹配整个cookie值),将它们与矩阵(总共17行)匹配,然后打印出产品名称 <script> var staticList = [ [“1234”, “Choc

我想知道如何解决匹配/查找问题,我“认为”多维数组就是解决方案。简而言之,我想将存储为cookie值的逗号分隔SKU列表与具有匹配产品名称的有限SKU列表进行匹配,并将匹配的产品名称打印到页面上。我不确定这是否是最好的方法,但根据我目前掌握的情况,我不清楚如何正确地将逗号分隔的字符串从cookie中分离出来(现在它正在尝试匹配整个cookie值),将它们与矩阵(总共17行)匹配,然后打印出产品名称

<script>
var staticList = [
 [“1234”, “Chocolate Ice Cream”],
 [“1235”, “Peanut Butter Cookie”],
 [“6G2Y”, “Raspberry Jell-O”],
 [“YY23”, “Vanilla Wafers”]
];
var cookieSkus = [‘1235,YY23’];  // comma separated value from cookie

jQuery(function () {
 for (var i = 0; i < staticList.length; i++)  {
   if (cookieSkus.indexOf(staticList [i][0]) > -1) {
    jQuery('#pdisplay).append(staticList [i] [1] + '<br />');
   }
 }
});

</script>

<p id=”pdisplay”></p>

var静态列表=[
[“1234”,“巧克力冰淇淋”],
[“1235”,“花生酱饼干”],
[“6G2Y”、“覆盆子果冻-O”],
[“YY23”,“香草薄饼”]
];
var cookieSkus=['1235,YY23'];//从cookie中以逗号分隔的值
jQuery(函数(){
对于(var i=0;i-1){
jQuery('#pdisplay).append(staticList[i][1]+'
'); } } });

在本例中,“pdisplay”段将包含:

花生酱饼干
香草薄饼


有没有一种方法可以纠正我上面所说的,或者有没有更好的方法来完成我想做的事情?

我会尝试以下方法:

var cookieSkus = cookieSkus[0].split(',');

staticList.filter(function(cell){
     return  cookieSkus.some(function(val){return cell[0] === val; });   
 }).map(function(cell){
       jQuery('#pdisplay).append(cell[1] + '<br />');
    });
var cookieSkus=cookieSkus[0].split(','); staticList.filter(函数(单元格){ return cookieSkus.some(函数(val){return cell[0]==val;}); }).map(函数(单元格){ jQuery('#pdisplay).append(单元格[1]+'
'); });
免责声明:根据上面提供的示例代码以及最近的评论提供,首先,您可能希望关注Cookie SKU,而不是staticList。原因是cookie可能有一个可变的数字,并且可能小到0个元素。(毕竟,如果没有项目,我们不需要列出项目)

这可以通过将字符串转换为数组,然后检查SKU是否在staticList中来实现。不幸的是,由于您使用的是多维数组,因此需要检查每个cookie sku的staticList。仅使用此建议,以下是一个基本示例:

重写:说明staticList是数组的数组这一事实

jQuery(function() {
    var skus = cookieSkus[0].split(',');
    for (var i = 0; i < skus.length; i++) {
        for (var j = 0; j < staticList.length; j++) {
            if (staticList[j][0] == skus[i]) {
                jQuery('#pdisplay').append(staticList[j][2] + '<br/>');
                break; // Will end inner if the item is found... Saves a lot of extra time.
            }
        }
    }
});
索引可以是任何基元值(整数或字符串)。该值可以是任何有效的javascript值,包括函数或内部对象。现在,要获取特定索引处的值,可以执行以下操作之一:

objectName.index1 (no quotes)
或:

其中任何一项的结果将是:

value1

就这么简单。

这是正确的['1235,YY23']还是像这样的['1235','YY23']相反?OP特别指出它是一个逗号分隔的值。这通常意味着字符串,而不是数组。@FuzzicalLogic此语法[]建议使用一个数组,并且它围绕着variableUnderstand,但数组可能是一个保持其语句完全有效的单个元素。如果我要改进您的答案,我会考虑这样一种情况,即它是一个单元素数组,第一个元素也是字符串。他提供的实际代码也表明了这一点。@FuzzicalLogic我根据这些注释更新了解决方案。希望对你有所帮助我不需要你改变你的解决方案,因为如果你对OPs职位的看法是正确的,这是非常好的。我的意思是,在代码的基础上添加一些说明将改进您的原始答案。模糊逻辑-我不能使用Map,因为我必须支持IE8。我喜欢使用cookie字符串而不是更大的矩阵。最后,该函数似乎不起作用(我处理了示例中缺少的括号)。没有错误,只是与任何值都不匹配。另外,在您的示例中,我是否会执行类似于staticList[SKU[I][1]的操作,因为我希望打印相关的产品名称,而不是匹配的字符串?了解
映射
,这就是它被单独添加的原因。关于第二个问题。。。你说得对。我没有正确处理这个名字。正在更新以解释此问题。我突然想到我已将此代码弄错了。花一些时间完全重写答案,而不是尝试快速应用拼写错误修复。给您带来的不便,我深表歉意。您仍然不为我工作。我去掉了IF语句,只是将两个数组都打印到FOR循环的页面上,以至少消除数组本身的问题。看起来问题在于匹配(staticList[SKU[i]][0])。移动括号似乎没有帮助([SKU[i][0]])好的。答案被改写了。请完全重新阅读,因为这是经过深思熟虑的,并且添加了另一个潜在的解决方案。
objectName.index1 (no quotes)
objectName["index1"] (quotes needed if the index is a string)
value1