根据MDN文档,obj = [ { id: 100, Lat: 19.25, Lon: 74}, { id: 100, Lat: 19.79, Lon: 74.19 },
{ id: 101, Lat: 19.99, Lon:75.10 }, { id: 101, Lat: 20.37, Lon:68.9},
{ id: 119, Lat: 17, Lon: 70 }, { id: 107, Lat: -16, Lon: -165 },
{ id: 107, Lat: -15, Lon: -150 }
];
pivot = obj.reduce((acc,item) => {
let {id,Lat,Lon} = item;
if(!acc[id]) acc[id]= [];
acc[item.id].push({Lat, Lon});
return acc;
},{});
Object.keys(pivot).forEach((id) => {
pivot[id].forEach(coords => {
fn(coords.Lat,coords.Lon,id) //call your function here;
});
});
返回querySelector
。但是,返回值通常比该值更丰富。
例如,如果我选择一个Element
元素,我实际上会得到一个img
,根据文档,它是该层次结构的一部分:
HTMLImageElement
我对继承的理解是,对象可以访问链下游的属性,但不能访问链上的属性。
这是否意味着EventTarget ← Node ← Element ← HTMLElement ← HTMLImageElement
实际上并没有返回querySelector
,而是返回了Element
的许多对象之一?
答案 0 :(得分:1)
这是否意味着querySelector实际上并没有返回Element,而是返回了扩展Element的多个对象之一?
作为Element的子类的任何对象仍然是Element。这只是更具体的内容。
答案 1 :(得分:0)
当文档指示返回了特定的接口(Element
)时,从逻辑上讲,这意味着实现该接口(HTMLImageElement
)的所有内容也会被计数,否则它们必须列出所有子类,尤其是那些多余的子类。
答案 2 :(得分:0)
HTMLImageElement
实际上是实现元素,而不是扩展元素,并保留了HTMLElement
的所有属性,该属性实现了{{1 }}。
任何Element
都检查instanceof
返回的对象对于querySelector
是正确的,除非它为null。因此,对于querySelector而言,只要元素实现了Element
的所有属性并提供真实的检查,对于返回的元素的原型为HTMLImageElement
类型就没关系。
Element
。
querySelector返回的元素保证具有instanceof Element
的所有属性,或者为null,如果要使用其他专用属性,则必须进行自己的Element
检查。