0

波纹管是折线对象

var firstpolyline = new L.Polyline(myPointList, {
    color: 'red',
    weight: 5,
    smoothFactor: 1
    });

我已将此折线对象添加到数组中

var allpolylines = [];
allpolylines.push(firstpolyline);

像这样,我在这个数组中添加了更多 5 个折线对象。

现在我正在创建一个多段线对象。

var mytpolyline = new L.Polyline(myPointList, {
    color: 'red',
    weight: 5,
    smoothFactor: 1
    });

现在我想将 mytpolyline 对象与数组对象进行比较并找到该数组对象的索引。

我试过的是

var index = allpolylines.indexOf(mytpolyline);

但这没有给出数组对象的索引。

4

1 回答 1

2

您不能直接比较对象,它们永远不会相等,除非您明确引用它们

var a = {};
var b = {};
var c = a;

b == a // false
c == a // true

如果您想检查数组中的对象是否相等,不幸的是您必须单独比较每个属性。

for (prop in a){
    if (a.hasOwnProperty){
        // compare a.prop to b.prop 
    }
}

使用普通(非对象)属性和较新的浏览器,您可以这样做:

function comp(a,b){
    return Object.keys(a).every(function(prop){
        if (!b[prop]){ return false; }
        else if (a[prop] !== b[prop]){ return false; }
        return true;
    });
}

一个例子

参考:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/every

于 2013-03-06T12:36:41.573 回答