我有一个json可能会返回这样的东西
"coordinates":
[
[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]],
[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]
]
这将显示为一个数组数组,我需要处理的内容与看起来像
的内容不同"coordinates":[30.0,10.0]
但是我根据坐标数组的长度做了不同的动作,在两种情况下都是2.(2是点其他多边形或折线)但是我需要确保它不是数组数组< / p>
答案 0 :(得分:3)
也许是这样的?
if (Array.isArray(coordinates)) {
// is an array
if (Array.isArray(coordinates[0])) {
// is an array of array
// process polyline
} else {
// process point
}
}
答案 1 :(得分:1)
但我需要确保它不是一个数组数组
如何进行简单的检查 -Function:
var a1=[1,2,3,4];
var a2=[[1],[2]];
function checkArrayOfArrays(a){
return a.every(function(x){ return Array.isArray(x); });
}
console.log(checkArrayOfArrays(a1));
console.log(checkArrayOfArrays(a2));
JSBIN玩。
Array.prototype.every()
的{{3}}文档。
编辑:当然有这种情况,你有一个混合状态,在这种情况下会被识别为false
,这并不总是令人满意的。然后Array.prototype.some()
来救援。
答案 2 :(得分:0)
假设:
bar = {"coordinates":[30.0,10.0]}
typeof bar.coordinates[0]
"number"
foo = {"coordinates":
[
[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]],
[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]
]}
typeof foo.coordinates[0]
"object"
然后你可以这样做:
foo = (deserialise your JSON here)
if (typeof foo.coordinates[0] == "object") {
// handle polyline
}
else {
// handle poinmt
}
答案 3 :(得分:0)
这样的功能:
var array = [30, 31, 32];
var nestedarray = [
[1, 2, 3]
];
function isArray(obj) {
// Under ES5 you could use obj.isArray
return toString.call(obj) === "[object Array]";
}
function isNestedArray(a) {
// Is the thing itself an array?
// If not, can't be a nested array
if (!isArray(a)) {
return false;
}
// Is the first element an array?
if (isArray(a[0])) {
return true;
}
// Otherwise, nope, not a nested array
return false;
}
console.log(isNestedArray(array));
console.log(isNestedArray(nestedarray));
console.log(isNestedArray(null));
答案 4 :(得分:0)
为什么不能简单地检查您正在处理的项目是否是数组?
Array.isArray(coordinates[0]);
会判断coordinates
数组中的第一项是否为数组(考虑coordinates
引用coordinates
属性的值)。
您也可以反过来检查第一项是否为数字。
function arePointCoords(coords) {
return Array.isArray(coords) && typeof coords[0] === 'number';
}
arePointCoords([30.0,10.0]); //true
arePointCoords([
[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]],
[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]
]); //false
请注意使用与域密切相关的名称而不是技术术语,例如: arePointCoords(coords)
而非!isArrayOfArrays(coords)
也使您的代码更易于理解。但是,arePointCoords
可能依赖于更通用的功能,例如内部isArrayOfArrays
。