@Deman1

Как отсортировать данные в js?

Здравствуйте, пожалуйста подскажите как реализовать систему в js, использую jquery.
Данные которые я получаю в js
var jeD= {
1: {
id: 2,
value: 43,
name: 'GGP'
},
1: {
id: 4,
value: 22,
name: 'GGU'
},
2: {
id: 55,
value: 95,
name: 'PLVAl'
},
2: {
id: 56,
value: 13,
name: 'PLINT'
},
2: {
id: 59,
value: 133,
name: 'BARG'
},
};

Мне надо отсортировать по номеру объекта тип если я укажу 1 мне выведет все объекты которые под номером 1, и потом от сортируются по value от маленькой к большой,
Какой я вижу результат
1: {
id: 4,
value: 22,
name: 'GGU'
},
1: {
id: 2,
value: 43,
name: 'GGP'
},

Хочу эти данные подстроить под select.
Помогите пожалуйста.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 2
vachunya
@vachunya
Бог верстки, JS maniac, React bomberman
Итого мне кажется ты нас немного дуришь друг, ты не можешь получить в JS такой объект :
var jeD= {
    1: {
        id: 2,
        value: 43,
        name: 'GGP'
    },
    1: {
        id: 4,
        value: 22,
        name: 'GGU'
    },
    2: {
        id: 55,
        value: 95,
        name: 'PLVAl'
    },
    2: {
        id: 56,
        value: 13,
        name: 'PLINT'
    },
    2: {
        id: 59,
        value: 133,
        name: 'BARG'
    },
};


Ведь в JS одинаковые свойства затирают друг друга, итого на выходе ты получишь вот такой объект:
jeD= {
    1: {
        id: 4,
        value: 22,
        name: 'GGU'
    },
    2: {
        id: 59,
        value: 133,
        name: 'BARG'
    },
};


Поэтому предлагаю сделать хотя бы так:
var jeD= {
  'items': [
  <?php foreach($data as $item): ?> 
    'number':<?php echo $item['number'] ?>,
    'id': <?php echo $item['id'] ?>,
    'value': <?php echo $item['value'] ?>,
    'name': <?php echo $item['name'] ?>
  <?php endforeach; ?>
    ],
sortNum(num) {return this.items.filter( elem => elem.number == num).sort( (e1,e2) => e1.value - e2.value)} 
};


Теперь метод sortNum() будет возвращать вам отсортированный по номеру

Например jeD.sortNum(2) вернет вам :
[
{number: 2, id: 56, value: 13, name: "PLINT"},
{number: 2, id: 55, value: 95, name: "PLVAl"},
{number: 2, id: 59, value: 133, name: "BARG"}
]
собственно то чего вы и хотели, не благодарите))
Ответ написан
Комментировать
Вот такой вариант с парочкой циклов:
код
<?php 
//структуируем
$obj=array();
foreach($data as $item){	
	$obj[$item['number']][] = array('id'=>$item['id'], 'value'=>$item['value'], 'name'=>$item['name']);
}
//сортировка
foreach($obj as $key => $value){
	$val = array_column($obj[$key], 'value');
	array_multisort($val, SORT_ASC, $obj[$key]);
}
?>
var jeD=<?php echo json_encode($obj);?>;

Результат
var jeD={
	"1": [
		{
			"id": 4,
			"value": 22,
			"name": "GGU"
		},
		{
			"id": 2,
			"value": 43,
			"name": "GGP"
		}
	],
	"2": [
		{
			"id": 56,
			"value": 13,
			"name": "PLINT"
		},
		{
			"id": 55,
			"value": 95,
			"name": "PLVAl"
		},
		{
			"id": 59,
			"value": 133,
			"name": "BARG"
		}
	]
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы