Сравнение в многомерном массиве для поиска правильного индекса для использования в другом многомерном массиве не удается - PullRequest
2 голосов
/ 06 марта 2019

У меня есть вопрос, касающийся функции в 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, я бы тоже хотел это знать, я 'Я уверен, что есть лучший способ сделать это, что я и сделал, но я не нашел его)

Итак, как вы можете видеть, я сравниваю labels с каждым элементом combi, но это всегда false ...

Here are the results of the console.log

Я думаю, что я где-то допустил небольшую ошибку, но не могу ее найти ...

Ответы [ 2 ]

1 голос
/ 06 марта 2019

«с» и «метки» - это два разных массива с точным содержимым.Посмотрите этот вопрос , чтобы узнать, как сравнивать массивы.

0 голосов
/ 06 марта 2019

Если вам нужно по какой-то причине сохранить 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...