Ajuste necesario para almacenar múltiples datos en una matriz de Javascript o un objeto

Tengo una cuerda como

var str = 'Supplier Name^supplier^left^string*Spend (USD MM)^spend^right^number^5';

Escribo una función en javascript para recuperar los nombres de los campos de datos de la cadena anterior y almacenarlos en una matriz como:

        function getColNamesfromConfig(str) {
        var cols = new Array();
        for (i = 0; i <= str.split('*').length - 1; i++) {
            cols[i] = str.split('*')[i].split('^')[1];
            //Will write logic to retrieve the Supplier Name, Spend (USD MM) fields etc
        }
        return cols;
    }

El resultado que obtengo es: cols[0] = proveedor; cols[1] = gastar; y así sucesivamente... (que son campos de datos)

Luego hago una tabla dinámica y uso la información anterior recuperada como:

"onResultHttpService": function (result, properties) {

            var json_str = Sys.Serialization.JavaScriptSerializer.deserialize(result);


            var colNames = getColNamesfromConfig(properties.PodAttributes.DGConfig);
            var htmlMarkup = '';


            htmlMarkup = "";                
            htmlMarkup = htmlMarkup + "<table width='100%' border='1' cellspacing='0' cellpadding='0' class='gridView gridMouseOverEffect'>";
            htmlMarkup = htmlMarkup + "<tr>";

            for (var c = 0, colLen = colNames.length; c < colLen; c++) {
             //COLUMN LOOP (here i want to bind 'Supplier Name' and not 'supplier' which is what i get from getColNamesfromConfig(str);
                htmlMarkup = htmlMarkup + "<th align='left' class='secondaryLink tableContentRow'> <h5>" + colNames[c] + "</h5>";
                htmlMarkup = htmlMarkup + "</th>";
            }
            htmlMarkup = htmlMarkup + "</tr>";

            for (var i = 0, rowlen = json_str.length; i < rowlen; i++) {
                htmlMarkup = htmlMarkup + " <tr>"

                for (var c = 0, colLen = colNames.length; c < colLen; c++) {
                    htmlMarkup = htmlMarkup + " <td align='left' class='secondaryLink tableContentRow'>   " + json_str[i][colNames[c]];
                    htmlMarkup = htmlMarkup + "</td>"
                }
                htmlMarkup = htmlMarkup + "</tr>"
            }
            htmlMarkup = htmlMarkup + "</table>"
            divPortletId = '#' + properties.id;
            $(htmlMarkup).appendTo($(divPortletId));

        }

Si tuviera que recuperar el Nombre para mostrar también de la cadena de muestra, ¿cómo lo almacenaría en la misma matriz y accedería a él? Por ejemplo: quiero algo donde pueda hacer un bucle y obtener mi Nombre para mostrar (Nombre del proveedor) y también el nombre del campo de datos (proveedor). Solo quiero vincular el nombre para mostrar en mi BUCLE DE COLUMNA donde actualmente está vinculando el campo de datos de la columna. Por lo tanto, ayúdenme a TWEAK mi función getColNamesfromConfig (str) para devolver tanto el campo de datos como el nombre para mostrar en una matriz o un objeto literal si es posible ... Necesito algo como

cols[0].DisplayName = "Supplier Name";
cols[0].DatafieldName = "supplier";
cols[1].DisplayName = "Spend (USD MM)";
cols[1].DatafieldName = "spend";

preguntado el 27 de julio de 12 a las 06:07

¿Es esto solo JavaScript? -

sí, es javascript ... lo intenté con el objeto literal, pero me hace cosas de código duro que no quiero hacer. -

Te recomiendo que te esfuerces un poco más. Cuando publica una pregunta, también debe explicar cómo trató de corregir el problema. Publicar preguntas sin hacer un esfuerzo para responderlas usted mismo siempre hará que su pregunta sea rechazada:

1 Respuestas

function getColNamesfromConfig(str) {
    var cols = new Array();
    for (i = 0; i <= str.split('*').length - 1; i++) { 
        cols[i] = {}
        cols[i].DatafieldName = str.split('*')[i].split('^')[1]; 
        cols[i].DisplayField = str.split('*')[i].split('^')[0];
    }
    return cols;
}

Eso debería hacer el truco

Respondido 27 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.