代码之家  ›  专栏  ›  技术社区  ›  Irini K.

如何读取、编辑旧数组并将新数组保存在Javascript中?

  •  2
  • Irini K.  · 技术社区  · 6 年前

    我有个小问题,请帮帮我。我在JSFIDLE中有一个简单的脚本。更具体地说,首先我有一个文本文件,其中包含坐标和每对坐标的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
        }
    }]
    }
    

    这个文本文件由一个小脚本(在JSFIDLE中)读取,并保存在一个数组“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列导出到一个新的文本文件中。我希望你能理解我的意思。

    2 回复  |  直到 4 年前
        1
  •  2
  •   Parth Shah    6 年前

    如果要更新阵列,则。。

    text["features"].forEach(function(feature){
        feature["geometry"].z = feature["attributes"].Longtitude + 
        feature["attributes"].Latitude;
    })
    

    在这里 forEach 迭代数组中的所有元素(在本例中,文本[“features”]是一个对象数组)。函数作为参数传递给forEach。 forEach docs MDN .

    如果需要阵列的副本,请使用 map 在文本上。

    let newArray = text["features"].map(function(feature){
        return feature["attributes"].Longtitude + feature["attributes"].Latitude;
    })
    

    地图 迭代数组并给出更新的新数组。 map docs MDN .

    Result image .

    希望这对你有帮助!

        2
  •  0
  •   xianshenglu    6 年前

    尝试此演示;

    https://jsfiddle.net/n5jazrwq/4/

    上传txt,您将看到保存链接,单击它,您将下载目标数据。txt文件

    通过以下方式转换数据:

      features.forEach(function(obj, index) {
        obj.geometry.z = obj.attributes.Latitude + obj.attributes.Longtitude;
      });
    

    下载数据功能如下:

    exportData(JSON.stringify(data));