簡體   English   中英

如何更改JavaScript數組中的對象名稱?

[英]How do I change the object names within my javascript array?

我在該站點上找到了一些可能的解決方案,但是沒有一個真正幫助我前進。

我的數組如下所示:

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

我想將customerName更改為value,將addressLine1更改為data。 我嘗試了以下操作,但是我在這里做錯了。

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);

}

只需使用Array.map將您的數組值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;
  };
}

您並不是很遙遠,但請問自己,這行代碼有什么作用:

myArray[i].addressLine1= "data";

正確—將myArray[i].addressLine1屬性的值設置為"data" 那不是你想要的。 :-)您想向myArray[i]添加一個名為data的新屬性,並為其提供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 沒有它,您的代碼將成為“隱含全球性恐怖”的犧牲品。

就是說,如果這些是數組條目中僅有的兩個屬性,那么我可能會選擇每個支出者的 map 答案 ,或者做類似循環的事情,但是完全替換條目而不是修改它們:

function DumpCustomers() {
    var i;

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

    alert(myArray);

}

嘗試制作一個新的數組:)

像這樣:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM