Cómo convertir una matriz de JavaScript (o cadena delimitada) en un objeto con subobjetos

usuario1032531

De hecho, deseo convertir una cadena en un objeto profundo, pero estoy bastante seguro de que convertir la cadena en una matriz es el primer paso. Dejame explicar.

Estoy usando xeditable que, de forma predeterminada, se enviará {"name": "somePropertyName", "value": "someValue"}al servidor, sin embargo, deseo enviar {"somePropertyName": "someValue"}. Puedo lograr esto estableciendo $.fn.editable.defaults.paramsla devolución de llamada adecuada.

Ahora la parte en la que estoy atrapado. Estoy usando un patrón de nomenclatura especial que si el nombre tiene puntos (es decir, el nombre es a.b.c), no quiero enviarlo {"a.b.c": "someValue"}al servidor, sino enviarlo {"a":{"b":{"c":"someValue"}}}al servidor.

Tengo una versión que funciona parcialmente, sin embargo, no es muy elegante y, lo que es más importante, no he conseguido que funcione la última propiedad y la he codificado temporalmente, lo que no es aceptable.

¿Cómo se puede lograr esto?

$.fn.editable.defaults.params = function(params){
    return nvp2obj(params.name, params.value);
}

function nvp2obj(n, v, d) {
    d = d ? d : '.';
    n = n.split('.');
    var o = {};
    var r = o;
    n.reduce(function(total, currentValue, currentIndex, arr) {
        if(r) {
            r[currentValue]={};
            r=o[currentValue];
        }
        else {
            //this is obviously not correct
            o.a.b.c=v;
        }
        return o;
        }, o);
    return o;
}
var test = nvp2obj('a.b.c', 'someValue'); //{"a":{"b":{"c":"someValue"}}}
console.log('test', JSON.stringify(test));
Nina Scholz

Puede iterar las claves dadas y asignar el valor tomando la última clave.

function setValue(object, keys, value) {
    var last = keys.pop();
        
    keys.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}

var test = {};
    
setValue(test, 'a.b.c'.split('.'), 'someValue');
setValue(test, 'a.d.e'.split('.'), 'someValue2');
setValue(test, 'a.b.a'.split('.'), 'someValue3');

console.log(test);

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Cómo pasar un objeto o matriz con una cadena de consulta en PHP

¿Cómo convertir un objeto en una cadena con una cadena de formato?

Convertir una cadena delimitada en un objeto Expando

¿Cómo convertir una representación de cadena de un objeto javascript en un objeto real?

cómo convertir una matriz en un objeto con una clave específica en javascript

¿Cómo convertir un objeto en una cadena en javascript?

Cómo convertir una cadena JSON a un objeto PHP o creación de matriz * código *

Cómo convertir una matriz de objetos anidados en un objeto con pares de clave y valor en JavaScript

¿Cómo convertir una cadena a un objeto en JavaScript con datos provenientes de div data- atributo?

Cómo convertir una cadena de valores con un rango a una matriz en Ruby

¿Cómo convertir un cierto tipo de cadena en una matriz con claves en php?

¿Cómo convertir una matriz en un objeto en javascript con pares clave-valor asignados?

¿Cómo obtener un objeto con una cadena fija de una matriz en java?

Cómo convertir una cadena de notación de puntos en un objeto en Javascript

Cómo convertir un objeto a una cadena de JavaScript

¿Cómo convertir una cadena de tiempo en un objeto Date en Javascript?

Cómo convertir un objeto a una matriz en Javascript

¿Cómo convertir esta cadena en una matriz de JavaScript?

Dividir una cadena delimitada en un objeto

¿Cómo puedo convertir cada cadena de una matriz para que sea un objeto en la matriz en TypeScript?

¿Cómo convertir una matriz en una cadena delimitada por comas y comillas para sql?

¿Cómo convertir una matriz en una cadena delimitada por comas y comillas para sql?

¿Cómo convertir una matriz en una cadena delimitada por comas y comillas para sql?

¿Cómo convertir una cadena de fecha en un objeto de fecha o calendario?

¿Cómo convertir una cadena dd / mm / aaaa en un objeto de fecha JavaScript?

cómo convertir un objeto de fecha en una cadena usando javascript

¿Cómo convertir un objeto JSON a una matriz de JavaScript?

¿Cómo convertir una matriz de claves en un objeto?

Cómo convertir una matriz en un objeto de dardo

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pagination class not getting applied in html

  3. 3

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  4. 4

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  5. 5

    OpenQA.Selenium.NoSuchElementException-C # 셀레늄

  6. 6

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  7. 7

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  8. 8

    Joindre avec des valeurs séparées par des virgules dans SQL Server Compact ne fonctionne pas

  9. 9

    Recherche de la position d'index d'une valeur dans r dataframe

  10. 10

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  11. 11

    caída condicional de filas desde un marco de datos de pandas

  12. 12

    python: ¿por qué dice variable indefinida cuando llamo función?

  13. 13

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

  14. 14

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  15. 15

    Que signifie Decimal (-1)?

  16. 16

    Link library in Visual Studio, why two different ways?

  17. 17

    ¿Cómo determinar la menor cantidad de incrementos de Y necesarios para trazar un múltiplo de 5 en una gráfica?

  18. 18

    nested observables executed one after the other after termination

  19. 19

    uitableview delete button image in iOS

  20. 20

    C # cómo eliminar la última línea de un bucle

  21. 21

    R - ggplot2 - use raster as greyscale basemap

CalienteEtiquetas

Archivo