【问题标题】:Comparison in multidimensional array to find proper index to use in other multidimensional array fails在多维数组中比较以找到在其他多维数组中使用的正确索引失败
【发布时间】:2019-03-06 10:58:16
【问题描述】:

我对 Javascript 中的函数有疑问:

我只是将一个输入数组与另一个数组进行比较,然后根据结果返回一些内容,但由于某种原因,我的比较不起作用...

这是我的功能:

const createArrayColor = (labels) => {
  const combi = [
    ["bronze","gold","new","silver"],
    ["bronze","gold","silver"],
    ["gold","new","silver"],
    ["bronze","gold","new"],
    ["bronze","new","silver"],
    ["gold","silver"],
    ["bronze","gold"],
    ["gold","new"],
    ["bronze","silver"],
    ["new","silver"],
    ["bronze","new"],
    ["gold"],
    ["silver"],
    ["bronze"],
    ["new"],
  ];

  const color = [
    ["#614E1A","#c49c48", "#f4f3f3", "#A5A49B"],
    ["#614E1A", "#c49c48", "#A5A49B"],
    ["#c49c48", "#f4f3f3", "#A5A49B"],
    ["#614E1A", "#c49c48", "#f4f3f3"],
    ["#614E1A", "#f4f3f3", "#A5A49B"],
    ["#c49c48", "#A5A49B"],
    ["#614E1A", "#c49c48"],
    ["#c49c48", "#f4f3f3"],
    ["#614E1A", "#A5A49B"],
    ["#f4f3f3", "#A5A49B"],
    ["#614E1A", "#f4f3f3"],
    ["#c49c48"],
    ["#A5A49B"],
    ["#614E1A"],
    ["#f4f3f3"],
  ];

  let i = 0;

  combi.forEach((c) => {
      console.log("Color: " + color[i]);
      console.log("Combi:  " + c + " ,type:  " + c.constructor.name );
      console.log("labels: " + labels + " ,type:  " + labels.constructor.name );
      console.log("Is it equal? " + (labels === c));

    if (labels === c) {
      return color[i];
    }
    i = i + 1;
  })
}

(顺便说一句,如果你知道如何在 JS 中组合一个数组,我也想知道,我确信有比我所做的更好的方法,但我没有找到它)

如您所见,我将labelscombi 的每个元素进行比较,但始终是false...

我认为这是我在某个地方犯的一个小错误,但我找不到它......

【问题讨论】:

  • this question(我会将此标记为重复,但我不小心链接到一个不完全相同的问题,并删除了我的标记,现在它不会让我将其标记为又是一个骗局)
  • 是否有特殊原因将这些颜色和颜色名称值存储在多维数组中?
  • 你为什么不使用对象对 key:value of label:color?
  • 不清楚你想做什么

标签: javascript arrays multidimensional-array


【解决方案1】:

"c" 和 "labels" 是两个不同的数组,具有确切的内容。请参阅此question 了解如何比较数组。

【讨论】:

  • 你能提供一个实际问题的样本吗?
【解决方案2】:

如果您出于某种原因需要保留forEach 迭代器,则需要对该数组进行两次迭代,因为它是多维的,具有 2 个深度。

这将找到给定值的第一次出现:

const createArrayColor = (labels) => {
    const combi = [
        ["bronze","gold","new","silver"],
        ["bronze","gold","silver"],
        ["gold","new","silver"],
        ["bronze","gold","new"],
        ["bronze","new","silver"],
        ["gold","silver"],
        ["bronze","gold"],
        ["gold","new"],
        ["bronze","silver"],
        ["new","silver"],
        ["bronze","new"],
        ["gold"],
        ["silver"],
        ["bronze"],
        ["new"],
    ];

    const color = [
        ["#614E1A","#c49c48", "#f4f3f3", "#A5A49B"],
        ["#614E1A", "#c49c48", "#A5A49B"],
        ["#c49c48", "#f4f3f3", "#A5A49B"],
        ["#614E1A", "#c49c48", "#f4f3f3"],
        ["#614E1A", "#f4f3f3", "#A5A49B"],
        ["#c49c48", "#A5A49B"],
        ["#614E1A", "#c49c48"],
        ["#c49c48", "#f4f3f3"],
        ["#614E1A", "#A5A49B"],
        ["#f4f3f3", "#A5A49B"],
        ["#614E1A", "#f4f3f3"],
        ["#c49c48"],
        ["#A5A49B"],
        ["#614E1A"],
        ["#f4f3f3"],
    ];

    let i = 0;
    let foundColorValue;
    combi.forEach((combiArray, arrayIndex) => {
        combiArray.forEach( (combiLabel, labelIndex)=>{
              if(combiLabel === labels && foundColorValue === undefined){
                  
                 foundColorValue = color[arrayIndex][labelIndex];
                
              }
            

        });
        
      

    });
    return foundColorValue;

}

   let foundColor =  createArrayColor('silver');
   console.log('found ' + foundColor);

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2017-11-17
    相关资源
    最近更新 更多