我在这个网站上找到了一些可能的解决方案,但没有一个真正帮助我前进。
我的数组看起来像这样:
[
{"customerName":"Atelier graphique","addressLine1":"54, rue Royale"},
{"customerName":"Signal Gift Stores","addressLine1":"8489 Strong St."},
etc, etc
我想将customerName更改为value,将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);
}
答案 0 :(得分:6)
只需使用Array.map
将数组值投影到所需的类型:
var myTransformedArray = myOriginalArray.map(function(item){
return {
value : item.customerName,
data : item.addressLine1
};
});
如果您需要支持旧浏览器,则可能需要在缺少map
功能的情况下添加polyfill进行修补。上面的链接提供了符合ECMA-262 5 th Edition的实现:
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;
};
}
答案 1 :(得分:0)
你不是那么遥远,但问问自己,这条线做了什么:
myArray[i].addressLine1= "data";
?右 - 它将myArray[i].addressLine1
属性的值设置为"data"
。那不是你想要的。 :-)您想要将一个名为data
的新属性添加到myArray[i]
,并为其提供当前myArray[i].addressLine1
中的值。您可以通过分配新属性名称来实现:
myArray[i].data = myArray[i].addressLine1;
E.g:
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 的牺牲品。
那就是说,如果这些是数组条目中唯一的两个属性,我可能每spender's answer使用map
,或者做类似你的循环但是完全替换条目而不是修改它们:
function DumpCustomers() {
var i;
for(i=0;i<myArray.length; i++){
myArray[i] = {
data: myArray[i].addressLine1,
value: myArray[i].customerName
};
}
alert(myArray);
}
答案 2 :(得分: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;