@slowkazak

JQuery. Поиск элемента и получение данных в массиве?

Здравствуйте, есть такой массив:

arr = [
{
    title: "Категория 1",
	products: [
		{ art: "1", prodname:"Элемент 1 категории 1" },
		{ art: "2", prodname:"Элемент 2 категории 1" }
        ]
			
	},
        {
    title: "Категория 2",
	products: [
		{ art: "3", prodname:"Элемент 1 категории 2" },
		{ art: "4", prodname:"Элемент 2 категории 2" }
        ]
			
	},

];

Есть ли возможность зная значение art выдернуть данные из всей соответсвующей этому art строки?
  • Вопрос задан
  • 3102 просмотра
Решения вопроса 2
AlekseyNemiro
@AlekseyNemiro
full-stack developer
function GetCategoryByArt(art){
    var result = $.grep(arr, function(cat){
        return $.grep(cat.products, function(product){
            return product.art == art;
        }).length > 0;
    });
    return result.length > 0 ? result[0] : null;
}

function GetProductByArt(art){
    var result = null;
    $.each(arr, function(i, cat){
        $.each(cat.products, function(j, product){
            if(product.art == art)
            {
                result = product;
                return;
            }
        });
        if(result){ return; }
    });
    return result;
}

alert(GetCategoryByArt("3").title);
alert(GetProductByArt("3").prodname);

jsfiddle.net/alekseynemiro/pafthz0h
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
var arr = [
  {
    title: "Категория 1",
    products: [
      { art: "1", prodname:"Элемент 1 категории 1" },
      { art: "2", prodname:"Элемент 2 категории 1" }
    ]
  },
  {
    title: "Категория 2",
    products: [
      { art: "3", prodname:"Элемент 1 категории 2" },
      { art: "4", prodname:"Элемент 2 категории 2" }
    ]
  },
];

function searchInProducts(source, key, value) {
  var temp;
  for (var i = 0, ln = source.length; i < ln; i++) {
    temp = source[i]["products"];
    for (var k = 0, ln2 = temp.length; k < ln2; k++) {
      if (temp[k][key] == value) {
        return temp[k];
      }
    }
  }
}

console.log(searchInProducts(arr, "art", 2)); // {art: "2", prodname: "Элемент 2 категории 1"}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы