数组,更改具有相同属性的对象的值

时间:2018-04-10 13:26:42

标签: javascript arrays object functional-programming reduce

我有一个数组,这个数组包含具有属性的对象,例如: {Name,lat,lng}。

如果两个对象同时具有lat和lng的值,我必须这样做,那么我必须仅在第二个对象中修改lat和lng的值,换句话说我必须添加一个非常小的数值使它们不同。

数组示例:

var array = [
  {
   "id": "269849444",
   "name": "Ziano Piacentino",
   "lat": 45,
   "lng": 9.4,
  },
  {
   "id": "649296407",
   "name": "Monte Bondone",
   "lat": 46.0315,
   "lng": 11.05685,
  },
  {
   "id": "300151628",
   "name": "Cima Calisio",
   "lat": 46.0977158258,
   "lng": 11.1443512052,
  },
  {
   "id": "266239592",
   "name": "Trient, Trentino-Alto Adige, Italy",
   "lat": 46.0667,
   "lng": 11.1333,
  },
  {
   "id": "130313194355778",
   "name": "Monte Celva",
   "lat": 46.0695882,
   "lng": 11.1783065,
  },
  {
   "id": "217942785",
   "name": "Trento, Italy",
   "lat": 46.0667,
   "lng": 11.1333,
  },
  {
   "id": "478657266",
   "name": "Mercatino di Natale a Levico Terme città da amare",
   "lat": 46.0099217576,
   "lng": 11.3052625593,
  },
  {
   "id": "288554028181059",
   "name": "Fontana Del Nettuno, Trento",
   "lat": 46.0675553413,
   "lng": 11.1213752236,
  },
  {
   "id": "252747884",
   "name": "Duomo di Milano - Milan Cathedral",
   "lat": 45.4646680426,
   "lng": 9.1904055604,
  },
  {
   "id": "213183830",
   "name": "Piacenza",
   "lat": 45.0167,
   "lng": 9.66667,
  },
    {
   "id": "213183830",
   "name": "Home",
   "lat": 45.0167,
   "lng": 9.66667,
  }
 ];

有什么建议吗? 即使我认为只有解决方案是使用双倍。

2 个答案:

答案 0 :(得分:1)

试试这个:

var array = [...];

array.forEach(function(obj1, key1){
  var increment = 0.000001;
  array.forEach(function(obj2, key2){
    if (key1 != key2){
      if(obj1.lat == obj2.lat && obj1.lng == obj2.lng){
        array[key2].lat += increment;
        array[key2].lng += increment;
        increment += 0.000001;
      }
    }
  });
});

答案 1 :(得分:1)

解决代码问题的步骤是:

  • 了解问题
  • 了解解决问题的方法
  • 以伪代码计划

恭喜,前两步已完成。我可以帮忙解决第三个问题,你将为第四个做好准备!

最基本的方法是有两个循环,在这里你可以搜索数组中的每个项目,直到找到符合条件的项目并执行你需要做的事情。

以下不是实际的代码语法,它是伪代码。这是一种让您更深入地了解解决问题的道路的方法。

var array = {...}    
for elementA in array {
   for elementB in array{
       //First you have to make sure you are not comparing the same value in the array with itself
       if elementA.index is different from elementB.index then {
            if elementA equals elementB {
                change elementB
             }
       }
   }
}

因此,您在此伪代码中执行的操作是从数组中获取一个元素,并将其与同一数组中的所有其他项匹配。你必须小心不要试图与自己匹配,避免这种情况的一种方法是通过比较项目的索引位置,如果它们不同,你可以非常确定它不是同一个项目。一旦你通过了这个障碍,那么你要做的就是询问它们是否相同(在你的情况下,如果它们具有相同的latlng值,则会特别相同)。如果是,那么你所要做的就是改变elementB,这是比较的第二个元素。

那就是它!

希望这有助于您走上正确的道路。如果你提供一些你接近问题的方法,而不是要求原始答案,你可以从StackOverflow中获得更多。