检测阵列数组

时间:2014-08-07 18:47:55

标签: javascript arrays json

我有一个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>

5 个答案:

答案 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