2015-03-12 2 views
2

В моем угловом приложении я получаю данные Json, как показано ниже.Переименование ключа объекта в массиве с использованием javascript

[{"id":"5","name":"Immidiate"}, 
{"id":"4","name":"30 days"}, 
{"id":"3","name":"21 days"}, 
{"id":"2","name":"14 days"}, 
{"id":"1","name":"7 days"}, 
{"id":"6","name":"Custom"}] 

Мне нужен выход, как показано ниже,

[{"Name":"5","Data":"Immidiate"}, 
{"Name":"4","Data":"30 days"}, 
{"Name":"3","Data":"21 days"}, 
{"Name":"2","Data":"14 days"}, 
{"Name":"1","Data":"7 days"}, 
{"Name":"6","Data":"Custom"}] 

Вот мой код

$rootScope.DashboardData["Name"] = widget.seriesname ; 
delete $rootScope.DashboardData[widget.seriesname];     
$rootScope.DashboardData["data"] = widget.dataname ; 
delete $rootScope.DashboardData[widget.seriesname]; 
widget.chartSeries = $rootScope.DashboardData; 

где widget.seriesname является "идентификатор" и widget.dataname это "имя".

Задача: Ключ не изменяется!

ответ

6

Используйте map функцию:

var array = [{"id":"5","name":"Immidiate"}, 
{"id":"4","name":"30 days"}, 
{"id":"3","name":"21 days"}, 
{"id":"2","name":"14 days"}, 
{"id":"1","name":"7 days"}, 
{"id":"6","name":"Custom"}]; 

var resultArray = array.map(function(elm) { 
    return { Name: elm[widget.seriesname], Data: elm[widget.dataname]}; 
}); 
+0

новых ключей в объекте вашей возвращенной внутри функции карты («Имя», «Данные») – eladcon

+0

, поэтому я должен пройти внутри этот метод один за другим? – Sajeetharan

+1

нет его всего массива. посмотрите на мое редактирование, ваш результат - переменная resultArray – eladcon

2

EDIT: Просто видел ваш угловой тег - используйте угловой-х Foreach:

var out = []; 

angular.forEach(data, function (obj) { 
    out.push({ 
     Name: obj.id, 
     Data: obj.name 
    }); 
}); 

Без угловой:

Для современных браузеров используют array.map :

var out = data.map(function (obj) { 
    return { 
     Name: obj.id, 
     Data: obj.name 
    }; 
}); 

console.log(out); 

И в старых браузерах:

var data = [{"id":"5","name":"Immidiate"}, 
      {"id":"4","name":"30 days"}, 
      {"id":"3","name":"21 days"}, 
      {"id":"2","name":"14 days"}, 
      {"id":"1","name":"7 days"}, 
      {"id":"6","name":"Custom"}]; 

var out = []; 

for (var key in data) { 
    if (data.hasOwnProperty(key)) { 
     out.push({ 
      'Name': data[key].id, 
      'Data': data[key].name 
     }); 
    } 
} 

console.log(out); 
1

Вы можете также использовать Underscopre.jsmap метод:

$scope.newList = _.map(list, function(item) { 
return { Name: item.id, Data: item.name}; 
}); 

смотри пример в Fiddle


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