Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取、编辑旧数组并将新数组保存在Javascript中?_Javascript_Arrays_Text Files_Coordinates_Jsfiddle - Fatal编程技术网

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

如何读取、编辑旧数组并将新数组保存在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",

我有个小问题,请帮帮我。我在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”中:


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));