Сравнить два разных массива в javascript

Может ли кто-нибудь помочь в этом? Я пытаюсь сравнить два разных массива для нажатия значений, когда сравнение равно. ниже мои два (imageslide.therapy) массива totalValues, и я хочу сравнить имена, такие как кошки и собаки. если условие истинно, мне нужно нажать их URL-адреса изображений.

var imageslide = {
"therapy": [
    {
        "name": "cats",
        "images": [
            { "url": "cat/firstimg.jpg" },
            { "url": "cat/secondimg.jpg" },
            { "url": "cat/thirdimg.jpg" },
            { "url": "cat/fourthimg.jpg" }
        ]
    },

    {
        "name": "dogs",
        "images": [
            { "url": "dog/firstdog.jpeg" },
            { "url": "dog/seconddog.jpg" },
            { "url": "dog/thirddog.jpg" },
            { "url": "dog/fourthdog.jpg" }
        ]
    },

  ]
}

var totalValues = ["cats","dogs"];

и я пробовал, как показано ниже

var imageArray = imageslide.therapy
function compare(imageArray,totalValues ){
    imageArray.forEach((e1)=>totalValues.forEach((e2)=>{

        if (e1.name==e2){
    console.info(e1.name,",",e2)
        }
    })

Я не понимаю, что вы пытаетесь сделать. Может помочь, если вы сможете показать, с чего вы начинаете и чего хотите в конечном итоге.

Mark 09.08.2018 06:48

я хочу сравнить два массива. если cats == cats, то мне нужно вставить URL-адреса изображений кошек в новый массив.

deepak tinku 09.08.2018 06:53

Ваш английский в порядке. Это код, который мне трудно понять. Ваши операторы forEach работают (вы закрываете ) и } и вызываете функцию. Она выводит cats , cats \n dogs , dogs. Было бы просто помочь, если бы вы показали ожидаемый результат.

Mark 09.08.2018 07:06

Спасибо Mark Meyer и Abhishek за ваш ответ. я решил это.

deepak tinku 09.08.2018 09:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
5
115
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ознакомьтесь с функцией javascript filter (Ссылка на сайт для документации).

В вашем случае вы хотите сделать что-то вроде этого:

function getImagesByAnimalName(animal_name){
  var imageArray = imageslide.therapy;
  
  var animalImages = imageArray.filter(animalData => {
    return animalData.name === animal_name;
  })
  return animalImages[0].images;
}

Попробуйте вот так. Функция вернет URL-адреса для каждого элемента в массиве totalValues.

var totalValues = ["cats"];
var slides = imageslide.therapy;

function comp(slides, totalValues ){
  let retVal;
  for( val of totalValues ) {
    for( thisTh of slides ) {
      if ( thisTh.name == val ){
        retVal = thisTh.images;
      }
    }
  }
  
  return retVal;
}

Следующее создаст pics, плоский массив URL-адресов изображений, если это то, что вы хотите:

var pics=[].concat(...imageslide.therapy.map(el=>{
  if (totalValues.indexOf(el.name)>-1) 
return el.images.map(e=>e.url)}))
console.info(pics);
Ответ принят как подходящий

Насколько я понимаю из вашего вопроса, вот ответ. Пожалуйста, простите меня, я не очень разбираюсь в функциях стрелок, поэтому написал их на простом javascript.

var imageslide = {
    "therapy": [
                    {
                        "name": "cats",
                        "images": [
                            { "url": "cat/firstimg.jpg" },
                            { "url": "cat/secondimg.jpg" },
                            { "url": "cat/thirdimg.jpg" },
                            { "url": "cat/fourthimg.jpg" }
                        ]
                    },

                    {
                        "name": "dogs",
                        "images": [
                            { "url": "dog/firstdog.jpeg" },
                            { "url": "dog/seconddog.jpg" },
                            { "url": "dog/thirddog.jpg" },
                            { "url": "dog/fourthdog.jpg" }
                        ]
                    },

                ]
}
var totalValues = ["cats","dogs"];
var imageArray = imageslide.therapy
function compare(imageArray,totalValues ){
    for(var i=0;i<imageArray.length;i++){
        for(var j=0;j<totalValues.length;j++){
            if (totalValues[j]=imageArray[i].name){
                console.info(imageArray[i].name+"= = "+totalValues[j]);
                //imageArray[i].images.push({"url": "https://hexasoft.io"});
                //break;
                return imageArray[i].images;
            }
        }

    }
    //printResult(imageArray);
    return [];
}
function printResult(resultArray){
    for(var i=0;i<resultArray.length;i++) {
        console.info(resultArray[i].name);
        for(var j=0;j<resultArray[i].images.length;j++){
            console.info(resultArray[i].images[j]);
        }
    }
}
images = compare(imageArray, totalValues);
if (images.length > 0){
     for(var i=0;i<images.length; i++){
         images[i].push({"url": "your url"});
     }  
}

Вы можете передать URL-адрес функции, которая будет помещена в массив, или вы можете просто вернуть изображения результатов сопоставления и вставить URL-адрес в массив.

root 09.08.2018 07:32

Я пытался проголосовать за root, но не могу этого сделать. из-за меньшей репутации. как только я их получу, я проголосую окончательно.

deepak tinku 09.08.2018 12:04
function compare(imageArray, totalValues) {
    for (var a = 0; a < imageArray.length; a++) {
        for (var j = 0; j < totalValues.length; j++) {
            if (totalValues[j] == imageArray[a].name) {
                allValues.push(imageArray[a].images);
                for (var i = 0; i < allValues.length; i++) {
                   for(var j = 0; j < allValues[i].length; j++){
                    buildSlide(allValues[i][j].url);
                }
                }
            }
        }
    }
    displaySlides(slide_index);
}

Другие вопросы по теме