JavaScript:数组与对象数组

JavaScript:数组与对象数组,javascript,arrays,Javascript,Arrays,我遇到了一个问题,我正在运行的函数在一个数组中运行良好,而不是在另一个数组中运行 它们是以不同的方式创建的,根据我在控制台中看到的内容,它们显然是不同的,但我无法找出区别。有人能给我指出正确的方向吗?抱歉,如果这是JavaScript 101。下面是每个阵列定义的屏幕截图,然后是我的控制台上的快照 var working = [ {lat: -31.563910, lng: 147.154312}, {lat: -33.718234, lng: 150.36318

我遇到了一个问题,我正在运行的函数在一个数组中运行良好,而不是在另一个数组中运行

它们是以不同的方式创建的,根据我在控制台中看到的内容,它们显然是不同的,但我无法找出区别。有人能给我指出正确的方向吗?抱歉,如果这是JavaScript 101。下面是每个阵列定义的屏幕截图,然后是我的控制台上的快照

var working = [
        {lat: -31.563910, lng: 147.154312},
        {lat: -33.718234, lng: 150.363181},
        {lat: -33.727111, lng: 150.371124},
        {lat: -33.848588, lng: 151.209834},
        {lat: -33.851702, lng: 151.216968},
        {lat: -34.671264, lng: 150.863657},
        {lat: -35.304724, lng: 148.662905},
        {lat: -36.817685, lng: 175.699196},
        {lat: -36.828611, lng: 175.790222},
        {lat: -37.750000, lng: 145.116667},
        {lat: -37.759859, lng: 145.128708},
        {lat: -37.765015, lng: 145.133858},
        {lat: -37.770104, lng: 145.143299},
        {lat: -37.773700, lng: 145.145187},
        {lat: -37.774785, lng: 145.137978},
        {lat: -37.819616, lng: 144.968119},
        {lat: -38.330766, lng: 144.695692},
        {lat: -39.927193, lng: 175.053218},
        {lat: -41.330162, lng: 174.865694},
        {lat: -42.734358, lng: 147.439506},
        {lat: -42.734358, lng: 147.501315},
        {lat: -42.735258, lng: 147.438000},
        {lat: -43.999792, lng: 170.463352}
      ]

var notWorking= [];
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName('marker');
            Array.prototype.forEach.call(markers, function(markerElem) {
                var latlng ={lat: parseFloat(markerElem.getAttribute('lat')),
                            lng: parseFloat(markerElem.getAttribute('lng'))};
            notWorking.push(latlng);

检查
数据.responseXML
的格式是否正确

下面是一个示例代码,它与您的代码相同,只是XML文档是从字符串加载的:

var工作=[
{拉丁美洲:-31.563910,液化天然气:147.154312},
{拉脱维亚:-33.718234,液化天然气:150.363181},
{拉丁美洲:-33.727111,液化天然气:150.371124},
{拉丁美洲:-33.848588,液化天然气:151.209834},
{拉丁美洲:-33.851702,液化天然气:151.216968},
{拉丁美洲:-34.671264,液化天然气:150.863657},
{拉丁美洲:-35.304724,液化天然气:148.662905},
{拉丁美洲:-36.817685,液化天然气:175.699196},
{拉丁美洲:-36.828611,液化天然气:175.790222},
{拉脱维亚:-37.750000,液化天然气:145.116667},
{拉丁美洲:-37.759859,液化天然气:145.128708},
{拉丁美洲:-37.765015,液化天然气:145.133858},
{拉丁美洲:-37.770104,液化天然气:145.143299},
{拉丁美洲:-37.773700,液化天然气:145.145187},
{拉丁美洲:-37.774785,液化天然气:145.137978},
{lat:-37.819616,lng:144.968119},
{拉丁美洲:-38.330766,液化天然气:144.695692},
{拉丁美洲:-39.927193,液化天然气:175.053218},
{拉丁美洲:-41.330162,液化天然气:174.865694},
{拉丁美洲:-42.734358,液化天然气:147.439506},
{拉丁美洲:-42.734358,液化天然气:147.501315},
{拉丁美洲:-42.735258,液化天然气:147.438000},
{拉丁美洲:-43.999792,液化天然气:170.463352}
]
var notWorking=[];
var xmlString='';
var parser=新的DOMParser();
var xml=parser.parseFromString(xmlString,“text/xml”)//使用“text/xml”很重要
var markers=xml.documentElement.getElementsByTagName('marker');
Array.prototype.forEach.call(markers,function(markereem)){
var latlng={lat:parseFloat(markereem.getAttribute('lat')),
lng:parseFloat(markerem.getAttribute('lng'))};
不工作。推(板条);
});

console.log(notWorking)
检查
数据.responseXML
的格式是否正确

下面是一个示例代码,它与您的代码相同,只是XML文档是从字符串加载的:

var工作=[
{拉丁美洲:-31.563910,液化天然气:147.154312},
{拉脱维亚:-33.718234,液化天然气:150.363181},
{拉丁美洲:-33.727111,液化天然气:150.371124},
{拉丁美洲:-33.848588,液化天然气:151.209834},
{拉丁美洲:-33.851702,液化天然气:151.216968},
{拉丁美洲:-34.671264,液化天然气:150.863657},
{拉丁美洲:-35.304724,液化天然气:148.662905},
{拉丁美洲:-36.817685,液化天然气:175.699196},
{拉丁美洲:-36.828611,液化天然气:175.790222},
{拉脱维亚:-37.750000,液化天然气:145.116667},
{拉丁美洲:-37.759859,液化天然气:145.128708},
{拉丁美洲:-37.765015,液化天然气:145.133858},
{拉丁美洲:-37.770104,液化天然气:145.143299},
{拉丁美洲:-37.773700,液化天然气:145.145187},
{拉丁美洲:-37.774785,液化天然气:145.137978},
{lat:-37.819616,lng:144.968119},
{拉丁美洲:-38.330766,液化天然气:144.695692},
{拉丁美洲:-39.927193,液化天然气:175.053218},
{拉丁美洲:-41.330162,液化天然气:174.865694},
{拉丁美洲:-42.734358,液化天然气:147.439506},
{拉丁美洲:-42.734358,液化天然气:147.501315},
{拉丁美洲:-42.735258,液化天然气:147.438000},
{拉丁美洲:-43.999792,液化天然气:170.463352}
]
var notWorking=[];
var xmlString='';
var parser=新的DOMParser();
var xml=parser.parseFromString(xmlString,“text/xml”)//使用“text/xml”很重要
var markers=xml.documentElement.getElementsByTagName('marker');
Array.prototype.forEach.call(markers,function(markereem)){
var latlng={lat:parseFloat(markereem.getAttribute('lat')),
lng:parseFloat(markerem.getAttribute('lng'))};
不工作。推(板条);
});

console.log(不工作)
您发布的代码无效。该功能未关闭。我想你忘了复制记录变量的部分


我想猜测一下,您对控制台中看到的内容感到困惑,因为它显示了一个空数组,但其中包含数据。发生的情况是,在记录阵列时,阵列仍然为空,然后填充阵列,然后打开阵列并查看数据。当值更改时,控制台不会更新其内容,只有在呈现时才会更新。

您发布的代码无效。该功能未关闭。我想你忘了复制记录变量的部分


我想猜测一下,您对控制台中看到的内容感到困惑,因为它显示了一个空数组,但其中包含数据。发生的情况是,在记录阵列时,阵列仍然为空,然后填充阵列,然后打开阵列并查看数据。当值更改时,控制台不更新其内容,仅在呈现时更新。

notWorking
数组上调用控制台日志时,控制台日志为空!因此,这可能是在异步函数填充数组之前使用数组的问题。展开记录的阵列时,会出现一条注释,说明阵列的值刚刚计算过:

这意味着,当展开数组的日志时,控制台会在此时获取数组的值(这可能是在数组中填充了值之后)。展开之前的空日志(
[]
)证明了日志发生时阵列为空的假设


看看您的代码,它看起来像一个XMLHttpRequest(异步)。如果您想使用数组的值,那么必须在请求的回调中使用它,或者在请求的成功事件侦听器的回调中使用它,确保数组已填充

notWorking
数组上调用控制台日志时,它是空的!因此,这可能是使用arr的问题
var working = [
        {lat: -31.563910, lng: 147.154312}];
var arr = [{lat: -31.563910, lng: 147.154312}];
var arrayOfObj = [];
arrayOfObj.push(arr);

console.log(arr);

var flattenArr  =  arrayOfObj.reduce(function(prev, curr) {
  return prev.concat(curr);
});

console.log(JSON.stringify(flattenArr));