如何读取、编辑旧数组并将新数组保存在 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+Latitudelonglat 是文本中存在的变量)。所以基本上,我想要在数组 "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));