【问题标题】:Finding an object in javascript array [duplicate]在javascript数组中查找对象[重复]
【发布时间】:2018-12-18 08:05:04
【问题描述】:

所以这个问题之前有人问过,但我的情况有点不同,因为我已经尝试了这个网站中建议的所有解决方案,我有一个多维数组:

var array = [
{
    "dup":{ "lat":36.69507771893455,"lng":2.828052824475776 },
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
{
    "dup":{ "lat":36.69507687630523,"lng":2.8280525056927672},
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
{
    "dup":{ "lat":36.695076,"lng":2.8280523980529324},
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
{
    "dup":{ "lat":36.69507512369477,"lng":2.8280525056927672},
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
{
    "dup":{ "lat":36.69507428106545,"lng":2.828052824475776},
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
{
    "dup":{ "lat":36.695073504493834,"lng":2.828053342151293},
    "original":{ "lat":36.695076,"lng":2.8280580000000555}
},
...
]

我还有另一个小数组:

var datax = {"lat":36.69507428106545,"lng":2.828052824475776}

我只想找到与这个“副本”在同一行的“原始”。 到目前为止,我尝试了 find、filter 和 grep,但这些都没有解决我的问题。

我尝试过的代码:

var Cent = $.grep(array, function(e){ return e.dup== JSON.stringify(datax); });
contentString += " and "+Cent +"is the closer";

【问题讨论】:

  • 你想返回一个新的数组还是项的索引?
  • 你的意思和datax一样吗?
  • a) 向我们展示您的尝试,总是。 b) 你是否知道对象比较在 JS 中是如何工作的(或者更确切地说它是如何不工作的,取决于最初的假设)?
  • datax 是“dup”,想找到在同一行的“原始”

标签: javascript


【解决方案1】:

您仍然可以使用Array.filter()

var array = [{"dup":{"lat":36.69507771893455,"lng":2.828052824475776},"original":{"lat":36.695076,"lng":2.8280580000000555}},{"dup":{"lat":36.69507687630523,"lng":2.8280525056927672},"original":{"lat":36.695076,"lng":2.8280580000000555}},{"dup":{"lat":36.695076,"lng":2.8280523980529324},"original":{"lat":36.69507428106545,"lng":2.828052824475776}},{"dup":{"lat":36.69507512369477,"lng":2.8280525056927672},"original":{"lat":36.695076,"lng":2.8280580000000555}},{"dup":{"lat":36.69507428106545,"lng":2.828052824475776},"original":{"lat":36.695076,"lng":2.8280580000000555}},{"dup":{"lat":36.695073504493834,"lng":2.828053342151293},"original":{"lat":36.695076,"lng":2.8280580000000555}}];
var datax = {"lat":36.69507428106545,"lng":2.828052824475776}

var res = array.filter(item => item.original.lat === datax.lat && item.original.lng === datax.lng);
console.log(res);

【讨论】: