jQuery вырезать все ключи из многомерного ассоциативного массива - PullRequest
0 голосов
/ 16 февраля 2019

ОБНОВЛЕННЫЙ ВОПРОС

Вот вывод консоли массива (dataSet) в jQuery:

[
    {
        "Alias_0":"Toto",
        "Address_1":"Here",
        "Location_0":"Bombay"
    },
    {
        "Alias_0":"Tata",
        "Address_1":"There",
        "Location_0":"Berlin"
    },
    {
        "Alias_0":"Tutu",
        "Address_1":"Somewhere",
        "Location_0":"Brussels"
    }
]

Вот как я хотел бы преобразовать его:

[
    {
        "Alias":"Toto",
        "Address":"Here",
        "Location":"Bombay"
    },
    {
        "Alias":"Tata",
        "Address":"There",
        "Location":"Berlin"
    },
    {
        "Alias":"Tutu",
        "Address":"Somewhere",
        "Location":"Brussels"
    }
]

Вот моя попытка:

var dataSet = [
    {"Alias_0": "Toto", "Address_1": "Here",      "Location_0": "Bombay"},
    {"Alias_0": "Tata", "Address_1": "There",     "Location_0": "Berlin"},
    {"Alias_0": "Tutu", "Address_1": "Somewhere", "Location_0": "Brussels"}
];

var result=[];

$.each(dataSet, function(key1,value1){
    result[key1] = new Array();
    $.each(dataSet[key1], function(key2,value2){
        key2=key2.slice(0,-2);          
        result[key1][key2] = new Array();
        result[key1][key2] = value2;
    })
})

console.log(result)

Вот что я получаю:

[
    [],
    [],
    []
]

В чем здесь проблема?Ключи и значения при выводе в консоль показывают ожидаемые данные.Но массив «result» не включает их.Более того, новый формат массива не подходит ([] вместо {})

К вашему сведению: я бы предпочел просто убрать последние символы клавиш из массива original , нопоскольку я не смог этого сделать, я пытаюсь создать второй массив из исходного массива.Но если можно просто напрямую преобразовать исходный массив, не создавая второй, это было бы идеально.

В общем, это кажется чрезмерно сложным - просто удалить два символа из каждого ключа массива.Должен быть более простой способ (прямая функция?)

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Наконец-то получил.

var dataSet = [
    {"Alias_0": "Toto", "Address_1": "Here",      "Location_0": "Bombay"},
    {"Alias_0": "Tata", "Address_1": "There",     "Location_0": "Berlin"},
    {"Alias_0": "Tutu", "Address_8": "Somewhere", "Location_0": "Brussels"}
];

var sliced_dataSet=[];

for(var i=0;i<dataSet.length;i++){
    var obj={};
    Object.keys(dataSet[i]).forEach(function(key){
        var k = key.substring(0,key.length-2);
        obj[k] = dataSet[i][key];
    });
    sliced_dataSet.push(obj);
}

console.log(arr)
0 голосов
/ 16 февраля 2019

Вы можете использовать .reduce () :

var data = [{"black_0": "1", "red_1": "2", "blue_1": "3"}];

var result = Object.keys(data[0]).reduce(function(a, e) {
    a[0][e.replace(/_[01]/, '')] = data[0][e];
    return a;
}, [{}]);
console.log(result);
...