[英]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.