如何读取、编辑旧数组并将新数组保存在 Javascript 中?
How can I read, edit an old array and save the new array in Javascript?
我有一个小问题请帮助我。我在 JSFiddle 中有一个简单的脚本。更具体地说,首先我有一个文本文件,其中包含坐标和每对坐标的 id。此文本文件显示在此处:
{
"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
}
}]
}
这个文本文件由一个小脚本(在 JSFiddle 中)读取,毕竟保存在一个数组中 "text":
<input type='file' accept='text/plain' onchange='openFile(event)'><br>
<img id='output'>
<script>
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var text = reader.result;
console.log(reader.result.substring(0, 200));
console.log(text);
};
reader.readAsText(input.files[0]);
};
</script>
我的问题是:我想为每一对坐标添加一个新列,z
。此列将按如下方式计算:z=Longtitude+Latitude
(long
、lat
是文本中存在的变量)。所以基本上,我想要在数组 "text" 中重复,我可以在其中计算一个新列并保留旧列(经度、纬度和 Id 列)。在我看来,我希望将这 4 列导出到一个新的文本文件中。我希望你明白我在说什么。
如果你想更新数组那么..
text["features"].forEach(function(feature){
feature["geometry"].z = feature["attributes"].Longtitude +
feature["attributes"].Latitude;
})
这里,forEach
遍历数组中的所有元素(在你的例子中,text["features"] 是一个对象数组)。函数作为参数传递给 forEach.forEach docs MDN.
如果您想要数组的副本,请在文本上使用 map
。
let newArray = text["features"].map(function(feature){
return feature["attributes"].Longtitude + feature["attributes"].Latitude;
})
map
遍历数组并给出更新后的新数组。map docs MDN.
Result image.
希望对您有所帮助!
试试这个演示;
https://jsfiddle.net/n5jazrwq/4/
上传txt你会看到保存link,点击它你会下载目标data.txt
这样转换数据:
features.forEach(function(obj, index) {
obj.geometry.z = obj.attributes.Latitude + obj.attributes.Longtitude;
});
下载数据功能是这样的:
exportData(JSON.stringify(data));
我有一个小问题请帮助我。我在 JSFiddle 中有一个简单的脚本。更具体地说,首先我有一个文本文件,其中包含坐标和每对坐标的 id。此文本文件显示在此处:
{
"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
}
}]
}
这个文本文件由一个小脚本(在 JSFiddle 中)读取,毕竟保存在一个数组中 "text":
<input type='file' accept='text/plain' onchange='openFile(event)'><br>
<img id='output'>
<script>
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var text = reader.result;
console.log(reader.result.substring(0, 200));
console.log(text);
};
reader.readAsText(input.files[0]);
};
</script>
我的问题是:我想为每一对坐标添加一个新列,z
。此列将按如下方式计算:z=Longtitude+Latitude
(long
、lat
是文本中存在的变量)。所以基本上,我想要在数组 "text" 中重复,我可以在其中计算一个新列并保留旧列(经度、纬度和 Id 列)。在我看来,我希望将这 4 列导出到一个新的文本文件中。我希望你明白我在说什么。
如果你想更新数组那么..
text["features"].forEach(function(feature){
feature["geometry"].z = feature["attributes"].Longtitude +
feature["attributes"].Latitude;
})
这里,forEach
遍历数组中的所有元素(在你的例子中,text["features"] 是一个对象数组)。函数作为参数传递给 forEach.forEach docs MDN.
如果您想要数组的副本,请在文本上使用 map
。
let newArray = text["features"].map(function(feature){
return feature["attributes"].Longtitude + feature["attributes"].Latitude;
})
map
遍历数组并给出更新后的新数组。map docs MDN.
Result image.
希望对您有所帮助!
试试这个演示;
https://jsfiddle.net/n5jazrwq/4/
上传txt你会看到保存link,点击它你会下载目标data.txt
这样转换数据:
features.forEach(function(obj, index) {
obj.geometry.z = obj.attributes.Latitude + obj.attributes.Longtitude;
});
下载数据功能是这样的:
exportData(JSON.stringify(data));