Wali Faizy Ответов: 1

Как перебрать массив объектов AD возвращение подходящий объект


У меня есть массив алфавитов от А до Я и массив объектов(который имеет свойства и значения), я должен пересечь объект бренда и сгруппировать его по алфавиту, например, если алфавит A чем мы должны сгруппировать все brand_name, начинающиеся с буквы A, то есть Adidas и adidas_orignals, Я использую.map and .filter для соответствующей функциональности, может ли кто-нибудь помочь мне для вышеуказанной функциональности, заранее спасибо



const en_alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

        const brands = [
          {id:1, brand_name: 'adidas', brand_trans: 'أديداس', isPremium: true, url: '/brands/adidas'},
          {id:2, brand_name: 'adidas Originals', brand_trans: 'أديداس اوريجينال', isPremium: false, url: '/brands/adidas-originals'},
          {id:4, brand_name: 'Bodyism', brand_trans: 'بودييزم', isPremium: false, url: '/brands/bodyism'},
          {id:5, brand_name: 'Columbia', brand_trans: 'كولومبيا', isPremium: false, url: '/brands/columbia'},
          {id:5, brand_name: 'Converse', brand_trans: 'كونفرس', isPremium: true, url: '/brands/converse'},
        ];


возвращаемое значение должно быть таким же, как показано ниже
{
          brand_group_title: 'a',
          brand_list: [
            {id:1, brand_name: 'adidas', brand_trans: 'أديداس', isPremium: true, url: '/brands/adidas'},
            {id:2, brand_name: 'adidas Originals', brand_trans: 'أديداس اوريجينال', isPremium: false, url: '/brands/adidas-originals'},
            ]
        }
        {
          brand_group_title: 'b',
          brand_list: [
            {id:4, brand_name: 'Bodyism', brand_trans: 'بودييزم', isPremium: false, url: '/brands/bodyism'},
          ]
        }
        {
          brand_group_title: 'c',
          brand_list: [
            {id:5, brand_name: 'Columbia', brand_trans: 'كولومبيا', isPremium: false, url: '/brands/columbia'},
            {id:5, brand_name: 'Converse', brand_trans: 'كونفرس', isPremium: true, url: '/brands/converse'},
          ]
        }


Что я уже пробовал:

Я использую функцию. map и. filter для вышеперечисленного

let printData = [];
 
var printList = brands.filter(function(str) {
  return str.map(function(char) {
    this.brand_name.charAt(0) === str;
  });
});

1 Ответов

Рейтинг:
7

Karthik_Mahalingam

пробовать

var result = [];
		for	(var i = 0; i<en_alpha.length; i ++){
		 var ch = en_alpha[i];
		var matchedItems  = brands.filter(function (obj){ return obj.brand_name.toLowerCase().startsWith(ch)})
		if(matchedItems.length>0)
		 result.push( { brand_group_title:ch,brand_list: matchedItems } );
		}
		alert(JSON.stringify(result))


Wali Faizy

Привет, Картик, можно ли использовать функцию фильтра и карты, которую я дал sollution

Karthik_Mahalingam

	var result =  en_alpha.map(function(ch){ 
		 return { brand_group_title:ch,brand_list: brands.filter(function (obj){ return obj.brand_name.toLowerCase().startsWith(ch)}) } ;
		}).filter(function(res){ return res.brand_list.length>0});

Karthik_Mahalingam

(или)

	var result =  en_alpha.map(function(ch){ 
		var matchedItems  = brands.filter(function (obj){ return obj.brand_name.toLowerCase().startsWith(ch)})
		if(matchedItems.length>0)
		 return { brand_group_title:ch,brand_list: matchedItems } ;
		}).filter(function(res){ return res!=undefined});
		 
		alert(JSON.stringify(result))

Wali Faizy

Привет Karthik, у меня есть аналогичный массив арабского алфавита, теперь я хочу напечатать те же самые вышеуказанные бренды в соответствии с арабским алфавитом, я пытаюсь сделать то же самое выше sollution, но это не печать в соответствии с арабскими алфавитами, спасибо Karthik

Karthik_Mahalingam

разместить текст

Wali Faizy

// Массив арабских алфавитов
константный ar_alpha = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'المسعف', 'ژ', '.', 'ض', '؛', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', ',', 'ه', 'ی'];

Решение
var printList_ar = ar_alpha. map(функция (ch) {
var matchedItems = brands. filter(функция (obj) {
вернуться в obj.brand_trans.сплит("").обратный().присоединиться("").метода endswith(ч);
})
if (matchedItems.длина > 0)
вернуть {
brand_group_title: ч,
brand_list: matchedItems
};
}). фильтр (функция (res) {
return res != undefined
});

// Thirs-это не ошибка, но она только возвращает статистику брендов из b, как bodysm

Karthik_Mahalingam

поставьте отладчик и проверьте

Wali Faizy

Я уже сделал это, но это печать только бренда, начинающегося с арабской буквы B

Karthik_Mahalingam

у вас есть team viewer

Wali Faizy

нет, у меня нет

Karthik_Mahalingam

Хост в fiddler и поделитесь ссылкой

Wali Faizy

Привет karthik проверьте ниже ссылку jsfiddle, thans karthik теперь арабский lsit работает, их было несколько отсутствующих арабских алфавитов в массиве, то есть он не работал

https://jsfiddle.net/walifaizy/2y8p1w04/

Karthik_Mahalingam

о хорошо