Может ли кто-нибудь помочь в этом? Я пытаюсь сравнить два разных массива для нажатия значений, когда сравнение равно. ниже мои два (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)
}
})
я хочу сравнить два массива. если cats == cats, то мне нужно вставить URL-адреса изображений кошек в новый массив.
Ваш английский в порядке. Это код, который мне трудно понять. Ваши операторы forEach работают (вы закрываете ) и } и вызываете функцию. Она выводит cats , cats \n dogs , dogs. Было бы просто помочь, если бы вы показали ожидаемый результат.
Возможный дубликат Сравните два массива и вставьте разные значения в новый массив
Спасибо Mark Meyer и Abhishek за ваш ответ. я решил это.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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