2014-09-08 3 views
0

Я нашел некоторые возможные решения на этом сайте, но никто из них не помог мне продвинуться.Как изменить имена объектов в моем массиве javascript?

Мой массив выглядит следующим образом:

[ 
    {"customerName":"Atelier graphique","addressLine1":"54, rue Royale"}, 
    {"customerName":"Signal Gift Stores","addressLine1":"8489 Strong St."}, 
    etc, etc 

Я хочу изменить CUSTOMERNAME ценить и addressLine1 к данным. Я попробовал следующее, но я делаю что-то не так.

var myArray = []; 

$(document).ready(function() { 
    $("#text-id").on('click', function() { 
     $.ajax({ 
      type: 'post', 
      url: 'connect.php', 

      success: function(data) { 
       console.log(data); 
       myArray.push(data); 

     } 
    }); 
}); 


function DumpCustomers() { 

    for(i=0;i<myArray.length; i++){ 
     myArray[i].addressLine1= "data"; 
     delete myArray[i].addressLine1; 
     myArray[i].customerName= "value"; 
     delete myArray[i].customerName; 
    } 

    alert(myArray); 

} 
+3

кто вызов 'DumpCustomers' - посмотрите http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –

ответ

0

Вы не были, что далеко, но спросите себя, что делает эта линия сделать:

myArray[i].addressLine1= "data"; 

? Правая   — устанавливает значение myArray[i].addressLine1 собственности "data". Это не то, что вы хотите. :-) Вы хотите добавить новое свойство data в номер myArray[i] и присвоить ему значение в настоящее время в myArray[i].addressLine1. Вы делаете это путем присвоения нового имени свойства:

myArray[i].data = myArray[i].addressLine1; 

Например:

function DumpCustomers() { 
    var i; 

    for(i=0;i<myArray.length; i++){ 
     myArray[i].data = myArray[i].addressLine1; // Change here 
     delete myArray[i].addressLine1; 
     myArray[i].value = myArray[i].customerName; // And here 
     delete myArray[i].customerName; 
    } 

    alert(myArray); 

} 

... и в какой-то момент, вы должны иметь код вызова DumpCustomers, или переместить часть изменения имена свойств в ваш обработчик успеха.

Обратите внимание, что я добавил var i наверху. Ваш код падал до The Horror of Implicit Globals без него.

Тем не менее, если они являются единственными два свойства в записях массива, я бы, вероятно, пойти с map за spender's answer, или сделать что-то вроде вашего цикла, но полностью заменить записи, а не их модификации:

function DumpCustomers() { 
    var i; 

    for(i=0;i<myArray.length; i++){ 
     myArray[i] = { 
      data: myArray[i].addressLine1, 
      value: myArray[i].customerName 
     }; 
    } 

    alert(myArray); 

} 
6

Просто используйте Array.map чтобы проецировать массив значений для требуемого типа:

var myTransformedArray = myOriginalArray.map(function(item){ 
    return { 
     value : item.customerName, 
     data : item.addressLine1 
    }; 
}); 

Если вам необходимо поддерживать старые браузеры, вам может понадобиться добавить polyfill пропатчить через отсутствие map функция. Ссылка выше поставок этого ECMA-262 5 го Издание соответствует реализация:

if (!Array.prototype.map) { 
    Array.prototype.map = function(callback, thisArg) { 
    var T, A, k; 
    if (this == null) { 
     throw new TypeError(" this is null or not defined"); 
    } 
    var O = Object(this); 
    var len = O.length >>> 0; 
    if (typeof callback !== "function") { 
     throw new TypeError(callback + " is not a function"); 
    } 
    if (arguments.length > 1) { 
     T = thisArg; 
    } 
    A = new Array(len); 
    k = 0; 
    while (k < len) { 
     var kValue, mappedValue; 
     if (k in O) { 
     kValue = O[k]; 
     mappedValue = callback.call(T, kValue, k, O); 
     A[k] = mappedValue; 
     } 
     k++; 
    } 
    return A; 
    }; 
} 
+0

Это не будет работать в более раннем браузере s. Поскольку OP уже использует jQuery, рассмотрите [jQuery 'map'] (http://api.jquery.com/jquery.map/) для поддержки Shai

+0

эта' 'карта'' не из jquery ?? –

+0

@ EhsanSajjad: Нет, тот, который используется ответчиком, является ES5 'Array # map'. –

0

Попробуйте сделать новый массив :)

Как это:

var myArray = [ 
    {"customerName":"Atelier graphique","addressLine1":"54, rue Royale"}, 
    {"customerName":"Signal Gift Stores","addressLine1":"8489 Strong St."} 
], 

newArray = []; 
for(var i = 0, len = myArray.length; i < len; i++) 
{ 
    newArray.push({'value': myArray[i]['customerName'], 'data': myArray[i]['addressLine1']}); 
} 

myArray = newArray;