数组,更改具有相同属性的对象的值
Array, change the values of objects that have equal properties
我有一个数组,这个数组包含具有属性的对象,例如:
{名称,纬度,经度}。
如果两个对象具有相同的 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,
}
];
有什么建议吗?
即使我认为唯一的解决方案是使用 double for.
试试这个:
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;
}
}
});
});
用代码解决问题的步骤是:
- 理解问题
- 了解你需要做什么来解决它
- 用伪代码计划
- 代码
恭喜,前两步已完成。我可以帮助解决第三个问题,您可以为第四个做好准备!
最基本的方法是有两个循环,在其中搜索数组中的每一项,直到找到符合条件的一项并执行您需要做的事情。
以下不是实际的代码语法,是伪代码。一种让您更深入地了解解决问题的方法。
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
}
}
}
}
因此,您在此伪代码中所做的是从数组中取出一个元素,并将其与同一数组中的所有其他项进行匹配。您必须小心不要尝试与自身匹配,避免这种情况的一种方法是比较项目的索引位置,如果它们不同,您可以非常确定它不是同一项目。一旦你通过了这个障碍,你所要做的就是询问它们是否相同(在你的情况下,特别是如果它们对 lat
和 lng
具有相同的值)。如果是,那么您所要做的就是更改 elementB
,这是比较的第二个元素。
就是这样!
希望这能帮助您走上正确的道路。如果您提供一些您是如何解决问题的,而不是要求一个原始答案,您可以从 Whosebug 中获得更多。
我有一个数组,这个数组包含具有属性的对象,例如: {名称,纬度,经度}。
如果两个对象具有相同的 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,
}
];
有什么建议吗? 即使我认为唯一的解决方案是使用 double for.
试试这个:
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;
}
}
});
});
用代码解决问题的步骤是:
- 理解问题
- 了解你需要做什么来解决它
- 用伪代码计划
- 代码
恭喜,前两步已完成。我可以帮助解决第三个问题,您可以为第四个做好准备!
最基本的方法是有两个循环,在其中搜索数组中的每一项,直到找到符合条件的一项并执行您需要做的事情。
以下不是实际的代码语法,是伪代码。一种让您更深入地了解解决问题的方法。
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
}
}
}
}
因此,您在此伪代码中所做的是从数组中取出一个元素,并将其与同一数组中的所有其他项进行匹配。您必须小心不要尝试与自身匹配,避免这种情况的一种方法是比较项目的索引位置,如果它们不同,您可以非常确定它不是同一项目。一旦你通过了这个障碍,你所要做的就是询问它们是否相同(在你的情况下,特别是如果它们对 lat
和 lng
具有相同的值)。如果是,那么您所要做的就是更改 elementB
,这是比较的第二个元素。
就是这样!
希望这能帮助您走上正确的道路。如果您提供一些您是如何解决问题的,而不是要求一个原始答案,您可以从 Whosebug 中获得更多。