如何读取、编辑旧数组并将新数组保存在Javascript中?
我有个小问题,请帮帮我。我在JSFIDLE中有一个简单的脚本。更具体地说,首先我有一个文本文件,其中包含坐标和每对坐标的id。此文本文件如下所示:如何读取、编辑旧数组并将新数组保存在Javascript中?,javascript,arrays,text-files,coordinates,jsfiddle,Javascript,Arrays,Text Files,Coordinates,Jsfiddle,我有个小问题,请帮帮我。我在JSFIDLE中有一个简单的脚本。更具体地说,首先我有一个文本文件,其中包含坐标和每对坐标的id。此文本文件如下所示: { "displayFieldName": "", "fieldAliases": { "FID": "FID", "Id": "Id", "Longtitude": "Longtitude", "Latitude": "Latitude" }, "geometryType": "esriGeometryPoint",
{
"displayFieldName": "",
"fieldAliases": {
"FID": "FID",
"Id": "Id",
"Longtitude": "Longtitude",
"Latitude": "Latitude"
},
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 4326,
"latestWkid": 4326
},
"fields": [{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID"
}, {
"name": "Id",
"type": "esriFieldTypeInteger",
"alias": "Id"
}, {
"name": "Longtitude",
"type": "esriFieldTypeDouble",
"alias": "Longtitude"
}, {
"name": "Latitude",
"type": "esriFieldTypeDouble",
"alias": "Latitude"
}],
"features": [{
"attributes": {
"FID": 0,
"Id": 1,
"Longtitude": 23.739000000000001,
"Latitude": 37.972000000000001
},
"geometry": {
"x": 23.739000000000001,
"y": 37.972000000000001
}
}, {
"attributes": {
"FID": 1,
"Id": 2,
"Longtitude": 23.760100000000001,
"Latitude": 37.984999999999999
},
"geometry": {
"x": 23.760100000000001,
"y": 37.984999999999999
}
}, {
"attributes": {
"FID": 2,
"Id": 3,
"Longtitude": 23.749199999999998,
"Latitude": 37.975999999999999
},
"geometry": {
"x": 23.749199999999998,
"y": 37.975999999999999
}
}, {
"attributes": {
"FID": 3,
"Id": 4,
"Longtitude": 23.735700000000001,
"Latitude": 37.975999999999999
},
"geometry": {
"x": 23.735700000000001,
"y": 37.975999999999999
}
}]
}
这个文本文件由一个小脚本(在JSFIDLE中)读取,并保存在一个数组“text”中:
var openFile=函数(事件){
var输入=event.target;
var reader=new FileReader();
reader.onload=函数(){
var text=reader.result;
console.log(reader.result.substring(0200));
console.log(文本);
};
reader.readAsText(input.files[0]);
};
我的问题是:我想为每对坐标添加一个新列,
z
。此列的计算方式如下:z=longtude+Latitude
(long
,lat
是文本中存在的变量)。因此,基本上,我希望在数组“text”中重复一次,在这里我可以计算一个新列,也可以保留旧列(经度、纬度和Id列)。在我看来,我希望将这4列导出到一个新的文本文件中。我希望您理解我的意思。如果您想更新阵列,那么
text["features"].forEach(function(feature){
feature["geometry"].z = feature["attributes"].Longtitude +
feature["attributes"].Latitude;
})
在这里,forEach
迭代数组中的所有元素(在您的例子中,text[“features”]是一个对象数组)。函数作为参数传递给forEach
如果需要数组的副本,请在文本上使用map
let newArray = text["features"].map(function(feature){
return feature["attributes"].Longtitude + feature["attributes"].Latitude;
})
map
在数组上迭代并给出一个更新的新数组
希望对你有帮助 试试这个演示
上传txt,您将看到保存链接,单击它,您将下载target data.txt
通过以下方式转换数据:
features.forEach(function(obj, index) {
obj.geometry.z = obj.attributes.Latitude + obj.attributes.Longtitude;
});
下载数据功能如下:
exportData(JSON.stringify(data));
你好@Parth Shah!谢谢你的回复!我在JSFIDLE中的代码中尝试了这一点,但不起作用..:(我把你的代码放在脚本中我的代码之后..@IriniK。你如何分享你的JSFiddle.OK,txt文件(我不知道如何给你)就是你在这个查询的开头看到的那个!非常感谢你的帮助!嘿,明白了!:D当你阅读txt文件时,它被视为
String
。因此,typeof text
将显示String。你需要在这里将String转换为Object。为此,你可以使用JSON.parse
,并使用JSON.stringif来扭转这种效果y
。在文本对象中,可以在要素对象的几何体对象的z属性下找到它。
exportData(JSON.stringify(data));