Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象中查找数组_Javascript - Fatal编程技术网

Javascript 如何在对象中查找数组

Javascript 如何在对象中查找数组,javascript,Javascript,我有parkingSpots,它是一个包含坐标属性的对象数组,也是一个数组 e、 g指数0: _id: "5e03c83459d0c115589067ba" capacity: 2 description: "safas" title: "aa" coordinates: (2) [-34.193705512748686, 150.2320126953125] 我正试图找到找到数组的对象。我尝试了这个解决方案和其他许多解决方案,但仍然不起作用 let arrayToBeFound =

我有parkingSpots,它是一个包含坐标属性的对象数组,也是一个数组

e、 g指数0:

_id: "5e03c83459d0c115589067ba"
capacity: 2
description: "safas"
title: "aa"
coordinates: (2) [-34.193705512748686, 150.2320126953125]
我正试图找到找到数组的对象。我尝试了这个解决方案和其他许多解决方案,但仍然不起作用

    let arrayToBeFound = [e.latLng.lat(), e.latLng.lng()];
    let selectedParkingSpot = parkingSpots.find(x => x.coordinates === arrayToBeFound);

我一直没有定义,但它存在。有什么帮助吗?

您需要通过将第一个数组的每个项目与另一个数组的相应项目进行比较来比较两个数组。直接将一个数组与另一个数组进行比较是行不通的——它们总是不同的,因为JS通过引用来比较数组对象。只有当两个引用都指向同一个数组时,它们才会相等。但是,基本体是按值进行比较的


让selectedParkingSpot=parkingSpots.findx=>x.coordinates[0]==arrayToBeFound[0]&&x.coordinates[1]==arrayToBeFound[1] 我认为这是最简单的方法

let selectedParkingSpot = parkingSpots.find(x => x.coordinates[0] === arrayToBeFound[0] && x.coordinates[1] === arrayToBeFound[1]);

您可以使用这里发布的答案,我更喜欢它们,除非您要向该数组添加值,或者在其他数组和/或对象之间执行比较,或者不关心数组的顺序


否则,您可以使用按值比较对象。

您无法比较两个数组,但如果将它们字符串化,则可以进行比较

const data = [
    {
        _id: "5e03c83459d0c115589067ba",
        capacity: 2,
        description: "safas",
        title: "aa",
        coordinates: [-34.193705512748686, 150.2320126953125]
    }
]
const arrayToBeFound = [-34.193705512748686, 150.2320126953125]

let spot = data.find((ele)=>{
    return JSON.stringify(ele.coordinates) === JSON.stringify(arrayToBeFound)
})

// returns the object
console.log(spot)

// returns false
console.log(data[0].coordinates == arrayToBeFound)

//returns true
console.log(typeof data[0].coordinates === typeof arrayToBeFound)
未定义的原因是x.coordinates==arrayToBeFound的比较返回false,因此find不会返回任何内容,并且由于selectedParkingSpot不包含任何值,因此将未定义它。

$document.readyfunction{ 函数arraysEquala,b{ 如果a==b,则返回true; 如果a==null | | b==null,则返回false; 如果a.length!=b.length返回false; 对于变量i=0;i也许可以尝试parkingSpots.findx=>x.coordinates[0]==e.latLng.lat&&x.coordinates[1]==e.latLng.lng;不能使用===来比较数组,因为它们本质上是对象,并且对象是唯一的:一个对象永远不会严格等同于另一个对象。您需要根据@kaleidawave的建议单独比较lat和lng。这是否回答了您的问题?请不要建议将对象字符串化以进行比较。如果您有一个大的数据集,stringify将非常低效。