繁体   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