Упорядочивать array ассоциативно в jquery

У меня есть эта возвращенная структура предыдущей функции в PHP, который возвратил ассоциативный array путь ajax, что parseado в JSON с Jquery, и которого не могу упорядочивать раньше, потому что он нуждается в том, чтобы быть предварительно просмотренным сначала, в порядке, в котором он приходит (из-за восходящего ключа, как возможно видеть):

0: "INTEGECRE-1#_#1.80"
1: "INTEGECRE-3#_#2.40"
2: "INTEGECRE-5#_#2.20"
3: "INTEGECRE-16#_#3.70"
4: "INTEGECRE-170#_#2.10"
5: "INTEGECRE-1408#_#3.80"

Применив следующую функцию, которая отделяет ключи продолжительности службы, отделенных из-за "#_#", я это пробую помещать все в array ключ - стоимость, в котором ключ - имя identificativo INTEGECRE -* соединенный парами с Вашей продолжительностью службы "1.80", которые кроме того, я пробую упорядочить из-за продолжительности службы, восходящей формы.

    function montarEscenariosByAlgoritmo(externalIdsCresta, algoritmo){
        var extIds = [];
        var extIdsOrdenados = [];
        $.each(externalIdsCresta, function(id, cpCresta){
            var cpCrestaObj = cpCresta.split("#_#");
            if(cpCrestaObj[0] != null && cpCrestaObj[0] != undefined && $.trim(cpCrestaObj[0]) != ""){
                var cpCrestaId = cpCrestaObj[0];
            }
            if(cpCrestaObj[1] != null && cpCrestaObj[1] != undefined && $.trim(cpCrestaObj[1]) != ""){
                var duracion = cpCrestaObj[1];
            }
            extIds[cpCrestaId] = duracion;
        });

        extIdsOrdenados = extIds.sort(function(a, b) {
            return parseFloat(a.cpCrestaId) - parseFloat(b.cpCrestaId);
        });
}

у меня остается эта структура, применив предыдущую функцию, но не является аккуратным...

INTEGECRE-1: "1.80"
INTEGECRE-3: "2.40"
INTEGECRE-5: "2.20"
INTEGECRE-16: "3.70"
INTEGECRE-170: "2.10"
INTEGECRE-1408: "3.80"

Я пробую упорядочивать это, таким образом, но он это не делает:

extIdsOrdenados = extIds.sort(function(a, b) {
    return parseFloat(a.cpCrestaId) - parseFloat(b.cpCrestaId);
});

Я нуждаюсь в том, чтобы упорядочить ее для того, чтобы он остался упорядоченным стоимостью, не из-за ключа:

INTEGECRE-1: "1.80"
INTEGECRE-170: "2.10"
INTEGECRE-5: "2.20"
INTEGECRE-3: "2.40"
INTEGECRE-16: "3.70"
INTEGECRE-1408: "3.80"

Я благодарен за вашу помощь.

0
задан 11.03.2019, 03:32
1 ответ

EstГЎs перемешивая две концепции: карты и списки.

let entrada = {
  0: "INTEGECRE-1#_#1.80",
  1: "INTEGECRE-3#_#2.40",
  2: "INTEGECRE-5#_#2.20",
  3: "INTEGECRE-16#_#3.70",
  4: "INTEGECRE-170#_#2.10",
  5: "INTEGECRE-1408#_#3.80"
}
      
function montarEscenariosByAlgoritmo(externalIdsCresta, algoritmo){
  var extIds = [];
  var extIdsOrdenados = [];
  $.each(externalIdsCresta, function(id, cpCresta){
    
    var cpCrestaObj = cpCresta.split("#_#");
    if(cpCrestaObj[0] != null && cpCrestaObj[0] != undefined && $.trim(cpCrestaObj[0]) != ""){
        var cpCrestaId = cpCrestaObj[0];
    }
    if(cpCrestaObj[1] != null && cpCrestaObj[1] != undefined && $.trim(cpCrestaObj[1]) != ""){
        var duracion = cpCrestaObj[1];
    }
    console.log('Tenemos id:',cpCrestaId,' y duracion', duracion);
    extIds[cpCrestaId] = duracion;
  });
  console.log('Procesados', extIds.length,'elementos');
  extIdsOrdenados = extIds.sort(function(a, b) {
    return parseFloat(a.cpCrestaId) - parseFloat(b.cpCrestaId);
  });
  return extIds;
}

let salida = montarEscenariosByAlgoritmo(entrada);

console.log('Como array', salida);
console.log('Lista de valores (como objeto):',Object.entries(salida));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Проблема состоит в том, что ты хочешь возвратить список, но Г-ndices должны быть numГ©ricos, с которым estГЎs создавая новую карту на объекте array. В конце концов, у тебя есть array с нолем элементами но с несколькими дополнительными признаками, которые класс Array не созерцает и не умеет манипулировать (он не знает, что estГЎn ahГ-).

soluciГіn mГЎs простая состоит в том, чтобы иметь array (двойных) поступающих данных и упорядочивать это, так как карта не ordenable:

let entrada = {
	0: 'INTEGECRE-1#_#1.80',
	1: 'INTEGECRE-3#_#2.40',
	2: 'INTEGECRE-5#_#2.20',
	3: 'INTEGECRE-16#_#3.70',
	4: 'INTEGECRE-170#_#2.10',
	5: 'INTEGECRE-1408#_#3.80'
}

function montarEscenariosByAlgoritmo(externalIdsCresta, algoritmo) {
	var extIds = [];
	var extIdsOrdenados = [];
	$.each(externalIdsCresta, function (id, cpCresta) {
		const cpCrestaObj = cpCresta.split('#_#');
		let cpCrestaId, duracion;
		if (cpCrestaObj[0] && $.trim(cpCrestaObj[0])) {
			cpCrestaId = cpCrestaObj[0];
		}
		if (cpCrestaObj[1] && $.trim(cpCrestaObj[1])) {
			duracion = +cpCrestaObj[1];
		}
		
		extIds.push({ cpCrestaId, duracion });
	});
	
	extIdsOrdenados = extIds.sort(function (a, b) {
		return parseFloat(a.duracion) - parseFloat(b.duracion);
	});
	return extIdsOrdenados;
}

let salida = montarEscenariosByAlgoritmo(entrada);

console.log(salida);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
2
ответ дан 19.11.2019, 22:20
  • 1
    Спасибо Пабло Лозано, возвращает данные, как я нуждаюсь в них. Спасибо за explicació n –  Nando 11.03.2019, 03:55