【问题标题】:Permute positions of properties in an array of JSON objects with javascript使用 javascript 置换 JSON 对象数组中的属性位置
【发布时间】:2016-11-26 00:50:37
【问题描述】:

所以我有一个庞大的对象数组,看起来像这样:

var obj = [
  {longitude: lng1, latitude: lat1},
  {longitude: lng2, latitude: lat2}
]

我需要一个 javascript 函数,它允许我像这样排列数组中每个对象的属性的位置:

var switchedObj = [
  {latitude: lat1, longitude: lng1},
  {latitude: lat2, longitude: lng2}
]

有人能指出我正确的方向吗?
谢谢。

【问题讨论】:

  • permute the positions - 你想交换经度和纬度属性的顺序吗?我能问一下,那会有什么不同吗?这两个对象将具有相同的属性。结果是,javascript 对象属性没有“顺序”的概念,因为没有理由这样做
  • 话虽如此,属性的顺序(当 JSON.stringify 输出时)似乎可以控制 - var switchedObj = obj.map(function(item) {return {latitude:item.latitude, longitude:item.longitude}}); console.log(JSON.stringify(switchedObj)); - 你会看到输出具有你想要的顺序的属性 - 现在在 Firefox、Chrum、IE 和 Edge 中测试 - 都表现相同
  • 嗨@JaromandaX 感谢您的回答。我稍后会尝试。我之所以需要它,是因为某些框架希望你以某种顺序定义对象,否则它不起作用。我知道,一般来说,javascript没有顺序的概念,但是当涉及到第三方框架时,就另当别论了。希望你能理解我的意思。
  • 所以这些第三方框架必须使用 JSON 字符串作为输入?您不只是将obj 作为参数传递给函数吗?如果您是,并且订单对第 3 方框架“重要”,请寻找更好的第 3 方框架:D

标签: javascript arrays json google-maps


【解决方案1】:

这是一个可行的解决方案。假设我们有 lng1 、 lat1 、 lng2 和 lat2 的值。

基本上可以说我们有这个对象:

var obj = [
{longitude:10,latitude:100},
{longitude:20, latitude:200}
]

然后要获得您需要的解决方案,只需执行此操作即可。希望对您有所帮助!

var obj = [
{longitude:10,
 latitude:100
},

{longitude:20,
 latitude:200
}
]

var arr1 = [];
var arr2 = [];
var switchedObj = [];
for(var i in obj){
	if(obj[i].hasOwnProperty("longitude") && obj[i].hasOwnProperty("latitude")){
		arr1.push(obj[i]["longitude"]); // 10 and 20
		arr2.push(obj[i]["latitude"]);
	}
}
for(var k = 0; k < obj.length; k++){
      switchedObj.push({
      latitude: arr2[k],
      longitude: arr1[k]
    });
}

console.log(switchedObj);

【讨论】:

  • 感谢您的回答@HenryDev。它确实对我有用。
【解决方案2】:

灵感来自 d3.js permute 函数:

var obj = [
  {longitude: 1, latitude: 2},
  {longitude: 3, latitude: 4}
]

var permute = function(object) { 
  var i = Object.keys(object[0]).length; // ["latitude", "longitude"], length = 2
  var switchedObj = new Array(i);

  while (i--) switchedObj[i] = object[i]; // go through obj in reverse order 
                                          // and assign values to new obj
  return switchedObj;
};

permute(obj); 
// => [
//  {latitude: 2, longitude: 1},
//  {latitude: 4, longitude: 3}
// ]

【讨论】:

    【解决方案3】:

    你需要一个 for 循环,它以你想要的任何顺序返回一个带有键的对象。这是地图的主要部分,如下所示。不幸的是,JS 规范中没有要求对象的属性保持相同的顺序。在实践中,他们通常会这样做。但我不会依赖这个。

    var switchedObj = obj.map(coords => 
      ({latitude: coords.latitude, longitude: coords.longitude})
    );
    

    编辑:对于使用旧版本 JavaScript 的人:

    var switchedObj = obj.map(function(coords) {
      return {
        latitude: coords.latitude,
        longitude: coords.longitude,
      };
    });
    

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多