1

У меня есть многомерный объект. Вложенности объект нужно преобразовать в массив, я делаю это так:Преобразование объекта в индекс сохранения массива

var foobar = {"foo1": { "5": "bar1", "8": "bar2" }, "foo2": { "3": "bar8", "5": "bar9" }}; 

angular.forEach(foobar, function(value, key) { 
    if (angular.isObject(value)) { 
     var arr = Object.keys(value).map(function(k) { return value[k]; }); 
     foobar[key] = arr; 
    } 
}); 

console.log(foobar); 

{"foo1": ["bar1", "bar2"], "foo2": ["bar8", "bar9"]}; 

Как преобразовать объект в массив с сохранением индекса, чтобы сделать его выйти так:

{"foo1": [5 => "bar1", 8 => "bar2"], "foo2": [3 => "bar8", 5 => "bar9"]}; 

ответ

2

Просто попробуйте с:

angular.forEach(foobar, function(value, key) { 
    if (angular.isObject(value)) { 
    var arrValue = []; 
    Object.keys(value).forEach(function(k) { arrValue[k] = value[k]; }); 
    foobar[key] = arrValue; 
    } 
}); 
+3

IMHO было бы лучше заменить 'map' на' each', оба будут работать, но использование 'map' указывает на то, что вас интересует результат. Таким образом, это может выглядеть как ошибка в более позднем обзоре кода. –

+0

, заменяя 'map' на' each', выдает ошибку в угловом выражении: 'TypeError: Object.keys (...). Каждый не является функцией'. Ваш оригинальный метод с использованием 'map' выполняет то, что мне нужно. Поэтому я приму ответ. Но я не предполагал, что когда я вставляю массив с неизменным индексом в '$ location.search (foobar)', чтобы сделать из него строку запроса, он создает все элементы массива, которые должны были быть до предоставленного индекса как ' undefined' – qwaz

+0

Чтобы добавить к моему предыдущему комментарию: когда я использую '$ location.search ({" foo1 ": [3 => 'bar1']})'. он возвращает следующую строку: 'http: //website.com/path? foo1 = undefined & foo1 = undefined & foo1 = bar1'. Поэтому я должен пересмотреть алгоритм. – qwaz

Смежные вопросы