下划线迭代 javascript

underscore iteration javascript

我正在尝试使用下划线和 backbone 创建一个对象。我目前有一个对象数组,其中包含另一个对象和数据集的记录。

data[0] 包含位置的名称,而 data[2] 包含该位置的坐标

data: Array[3] 0: Objectcol_id: "4" data: "W Hotel Union 
Square" __proto__: Object1: Object2: Objectcol_id: "13"data: "40.736638, -73.988396"

为了获取坐标并将它们推送到新数组,我使用了以下函数:

var newarr  = _.map( rawData, function ( a ) { return [a.records[0].data[2].data] });

然后我拆分坐标数组并创建一个包含我设置坐标的键值对的对象。

var newnewarr = [];

for (i = 0; i < newarr.length; i++) {
  newnewarr[i] = _.map(newarr[i][0].split(","), function(s){ return parseFloat(s);
  });
}

function longlat( lat, long) {
  this.Latitude = lat; this.Longitude = long;
};

var coordinates = [];

for (i = 0; i < newnewarr.length; i++) {
  coordinates[i] = new longlat(newnewarr[i][0], newnewarr[i][1]);
  }

我现在想做但遇到困难的事情是尝试创建一个如下所示的对象:

newarr = [ {
   latitude: 40.736638,
   longitude: -73.988396,
   title: "W hotel Union Square"
   },
 {
   latitude: 40.736638,
   longitude: -73.988396,
   title: "Union Square Park"
   },

我的问题是如何使用我已有的创建这个对象数组?我尝试从遍历数据对象开始,但我很难做到。在它说 data[2] 的地方,id 喜欢迭代 data[0, 2] 来获取这些值,然后将它们推送到一个对象。希望这是清楚的!

var newarr  = _.map( rawData, function ( a ) { return  [a.records[0].data[2].data] });

您可以通过第二个 _.map() 调用轻松完成此操作,如下所示:

var rawData = [<your raw data here>];

var tempDataArray = _.map( rawData, function ( a ) { return [a.records[0]] });

var finalDataArr = tempDataArray.map(function(d) {
    var tempCoordinatesArray = d[2].data.split(",");

    return {
        latitude: tempCoordinatesArray[0],  
        longitude: tempCoordinatesArray[1],
        title: d[0],
    }
});

console.log(finalDataArr);

或者如果您想一步完成:

var rawData = [<your raw data here>];

var finalDataArr = rawData.map(function(d) {
    var tempData = d.records[0];
    var tempCoordinatesArray = tempData[2].date.split(",");

    return {
        latitude: tempCoordinatesArray[0],  
        longitude: tempCoordinatesArray[1],
        title: tempData[0],
    }
});

console.log(finalDataArr);

P.S。尝试为您的阵列选择更好的名称!